mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-06 15:24:56 +08:00
amcheck: Fix incorrect use of VARATT_IS_COMPRESSED.
The macro is being applied to a TOAST pointer, not a varlena header. Therefore the use of VARATT_IS_COMPRESSED() is wrong. We can check VARATT_EXTERNAL_IS_COMPRESSED(), but then we don't need the length check that follows. Report and fix by Kyotaro Horiguchi. Discussion: http://postgr.es/m/20220517.162719.1671558681467343711.horikyota.ntt@gmail.com
This commit is contained in:
parent
9f0b953457
commit
e243de03fb
@ -1385,19 +1385,11 @@ check_tuple_attribute(HeapCheckContext *ctx)
|
||||
toast_pointer.va_rawsize,
|
||||
VARLENA_SIZE_LIMIT));
|
||||
|
||||
if (VARATT_IS_COMPRESSED(&toast_pointer))
|
||||
if (VARATT_EXTERNAL_IS_COMPRESSED(toast_pointer))
|
||||
{
|
||||
ToastCompressionId cmid;
|
||||
bool valid = false;
|
||||
|
||||
/* Compression should never expand the attribute */
|
||||
if (VARATT_EXTERNAL_GET_EXTSIZE(toast_pointer) > toast_pointer.va_rawsize - VARHDRSZ)
|
||||
report_corruption(ctx,
|
||||
psprintf("toast value %u external size %u exceeds maximum expected for rawsize %d",
|
||||
toast_pointer.va_valueid,
|
||||
VARATT_EXTERNAL_GET_EXTSIZE(toast_pointer),
|
||||
toast_pointer.va_rawsize));
|
||||
|
||||
/* Compressed attributes should have a valid compression method */
|
||||
cmid = TOAST_COMPRESS_METHOD(&toast_pointer);
|
||||
switch (cmid)
|
||||
|
Loading…
Reference in New Issue
Block a user