]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
amcheck: Fix incorrect use of VARATT_IS_COMPRESSED.
authorRobert Haas <rhaas@postgresql.org>
Wed, 22 Jun 2022 17:11:49 +0000 (13:11 -0400)
committerRobert Haas <rhaas@postgresql.org>
Wed, 22 Jun 2022 17:11:49 +0000 (13:11 -0400)
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

contrib/amcheck/verify_heapam.c

index c875f3e5a2a559d6818517bd7e041e9685ef15ae..e488f5e234b3ff274f19a7beb68e3cc54ec8181b 100644 (file)
@@ -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)