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

Postfix for #7976: False validation error for short unpacked records (this time about short unpacked fragments)

This commit is contained in:
Dmitry Yemanov 2024-04-03 13:25:57 +03:00
parent 65d5aa309b
commit 9c171d3783

View File

@ -2805,9 +2805,9 @@ Validation::RTN Validation::walk_record(jrd_rel* relation, const rhd* header, US
const auto format = MET_format(vdr_tdbb, relation, header->rhd_format); const auto format = MET_format(vdr_tdbb, relation, header->rhd_format);
auto remainingLength = format->fmt_length; auto remainingLength = format->fmt_length;
auto calculateLength = [fragment, remainingLength](ULONG length, const UCHAR* data) auto calculateLength = [remainingLength](ULONG length, const UCHAR* data, bool notPacked)
{ {
if (fragment->rhdf_flags & rhd_not_packed) if (notPacked)
{ {
if (length > remainingLength) if (length > remainingLength)
{ {
@ -2826,7 +2826,8 @@ Validation::RTN Validation::walk_record(jrd_rel* relation, const rhd* header, US
return Compressor::getUnpackedLength(length, data); return Compressor::getUnpackedLength(length, data);
}; };
remainingLength -= calculateLength(length, p); bool notPacked = (fragment->rhdf_flags & rhd_not_packed) != 0;
remainingLength -= calculateLength(length, p, notPacked);
// Next, chase down fragments, if any // Next, chase down fragments, if any
@ -2878,7 +2879,8 @@ Validation::RTN Validation::walk_record(jrd_rel* relation, const rhd* header, US
length -= RHD_SIZE; length -= RHD_SIZE;
} }
remainingLength -= calculateLength(length, p); notPacked = (fragment->rhdf_flags & rhd_not_packed) != 0;
remainingLength -= calculateLength(length, p, notPacked);
page_number = fragment->rhdf_f_page; page_number = fragment->rhdf_f_page;
line_number = fragment->rhdf_f_line; line_number = fragment->rhdf_f_line;