8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-24 00:03:03 +01:00

Better report truncated paths than to crash due to malformed parameter block.

This commit is contained in:
robocop 2008-02-20 10:20:40 +00:00
parent ab144dea61
commit 5bff502eac

View File

@ -5558,7 +5558,7 @@ TEXT* JRD_num_attachments(TEXT* const buf, USHORT buf_len, USHORT flag,
ULONG num_att = 0;
ULONG drive_mask = 0L;
USHORT total = 0;
ULONG total = 0;
Firebird::HalfStaticArray<Firebird::PathName, 8> dbFiles;
try
@ -5578,8 +5578,8 @@ TEXT* JRD_num_attachments(TEXT* const buf, USHORT buf_len, USHORT flag,
if (flag == JRD_info_drivemask)
{
PageSpace* pageSpace = dbb->dbb_page_manager.findPageSpace(DB_PAGE_SPACE);
for (jrd_file* files = pageSpace->file; files; files = files->fil_next)
const PageSpace* pageSpace = dbb->dbb_page_manager.findPageSpace(DB_PAGE_SPACE);
for (const jrd_file* files = pageSpace->file; files; files = files->fil_next)
ExtractDriveLetter(files->fil_string, &drive_mask);
}
#endif
@ -5590,7 +5590,7 @@ TEXT* JRD_num_attachments(TEXT* const buf, USHORT buf_len, USHORT flag,
{
if (!dbFiles.exist(dbb->dbb_filename))
dbFiles.add(dbb->dbb_filename);
total += sizeof(USHORT) + dbb->dbb_filename.length();
total += sizeof(USHORT) + MIN(dbb->dbb_filename.length(), 255);
for (const Attachment* attach = dbb->dbb_attachments; attach;
attach = attach->att_next)
@ -5648,14 +5648,16 @@ TEXT* JRD_num_attachments(TEXT* const buf, USHORT buf_len, USHORT flag,
last db name
*/
fb_assert(num_dbs < MAX_USHORT);
*lbufp++ = (TEXT) num_dbs;
*lbufp++ = (TEXT) (num_dbs >> 8);
for (size_t n = 0; n < num_dbs; ++n) {
*lbufp++ = (TEXT) dbFiles[n].length();
*lbufp++ = (TEXT) (dbFiles[n].length() >> 8);
memcpy(lbufp, dbFiles[n].c_str(), dbFiles[n].length());
lbufp += dbFiles[n].length();
const USHORT dblen = MIN(dbFiles[n].length(), 255);
*lbufp++ = (TEXT) dblen;
*lbufp++ = (TEXT) (dblen >> 8);
memcpy(lbufp, dbFiles[n].c_str(), dblen);
lbufp += dblen;
}
}
}