Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w4qpg-002cW5-2x for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Mar 2026 01:45:25 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w4qpe-003VnK-0k for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Mar 2026 01:45:22 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w4qpd-003VnB-2f for pgsql-hackers@lists.postgresql.org; Tue, 24 Mar 2026 01:45:22 +0000 Received: from mail-ej1-x62c.google.com ([2a00:1450:4864:20::62c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w4qpb-00000000nPw-1CUx for pgsql-hackers@lists.postgresql.org; Tue, 24 Mar 2026 01:45:21 +0000 Received: by mail-ej1-x62c.google.com with SMTP id a640c23a62f3a-b93698bb57aso915814366b.0 for ; Mon, 23 Mar 2026 18:45:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774316718; cv=none; d=google.com; s=arc-20240605; b=VXZOH5hcYbHbLq2B+Mlbt1dJJwpSZYXE+hchAVOnfOYCPgyLUL8CeS9Np4p4ORk9HT SnzRob0IqIPIHxFWqqk/OubQQatKNCKD45LUkxlY4K8Mch0wpYGh+jnWZHX/HvGLW75H KVK9hQgWuex+D4bnwVS+malwCUztKChIRenFY4M+am5Tnxd9p+cEi4tgpjN64HSmfVYc wvQ9chr7eJcyOa6pwXDaOQzlP9HwSxKjD5KF7gV5VoM+SrtANcMdaYAC4NDHBIowzaQ0 9II7S7o2hicZD6q4yqHFKlkCsVy5Nw3wApqgnn2UA/E0ojMEoKkMkTojHIUxZqN46BsX 2spQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=xdjWUX11UCcyD9t4pSQ+TemGtTNsgQnoqLn8z01ZfjQ=; fh=nwNxTtLLPTU0ewfLM7SSbrjMajMl+wwnFkCY/fi90vE=; b=P5eh2aJL4vcLEM9Yj6+wgPAYP1L6RqOzeP67/K7nR4efFryxRc/B78hm15VoaTI4oK CYBzcbuihyl61yY7/2o+yEmp8t+RrGI7UeCxsPKOic2ktuGku06U6XlPxBwNs9//KWBg g90KJzgpYzKLu9RZwNCvuJtuX/SSfrtJaZX7BnDZbdvT1tCHen04bwLFmz7xWsrzleH8 84RGuQLsITNct1CD/GnuX/TbgDdwbo6YchuXfpiVoSsn1HrQ3p4jtMHhaAHTTu7C9Xft 9E9vKILtK1a220AdCwjsMBzwgrM2n7iFyV8cyXuncD2Naf3VeNiZoxzqWtPt21OEeWQd KYEA==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774316718; x=1774921518; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=xdjWUX11UCcyD9t4pSQ+TemGtTNsgQnoqLn8z01ZfjQ=; b=II/0VIP49dsOILJYDpWd8dLGh5A8mA3T0DbuCloCf0bsQJ6vHBiJdvQAOI6l9DRojk qbQx1OWTBzFgBaBqxlKDYthiDjbuqIsrsPR1lCMKnZ8Ii7aBUCfyeVQAVNbd4pZATX2o /Q+crHtfkmKyoCvaxm8rMtTYYGaPuB65bMGPzfAq4u0CRas08O/SzJesl4yiQi9TdCiT REc7Jli0MOokfM+r7BWDjt0yS8eMcJiqoTpZDK/2jXXuP/l8PNHN5haNXQHSUiDSDpG1 bB5mwA256t3tr0sFxXZrdfLkhy0Rd9SDtexg79uU1s9btlUDgbqnTN1jaPVjBsP0mM7h QtAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774316718; x=1774921518; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=xdjWUX11UCcyD9t4pSQ+TemGtTNsgQnoqLn8z01ZfjQ=; b=qvQm1egNC/dq+VdLnEhXEpC0IqfKRmP7bHqBiEOHnG3f8bp1RYSHF6D8vpeZgVYHvh UZyRS0Qpe7RRa2lZCy7qaaIFLXdftX7n6iCXSPcz0T3sptL/XK13ZY0pJtCUvZ5ZQ7I4 Ww6kDIQUbF3cVCxr8px/luZggeZhb8goYzAHiJW3773djOCWUa2Q+CX6nCDxxkU6b606 Krc+8CwxEXY+lOlrR7xjZr/hkT3Ma8pLm69Vh4KxhFMnBNYNkwgQAYPhjlWwpmIFsaT5 FeG2Ee6LImtneHhscl9/oL6UvZFVzfPagIMNIZGxzvkcJBhvE1NZ9LBVZBrYCGwkwKa9 6R6w== X-Gm-Message-State: AOJu0YymHmHO+YZcHC5gWYkJACLZaJ6ObbVwpRr34HEGzeC1s64nQnS6 6lIo544F0w9ttVbu8LFXcVReErxEWrOhKWKEXQNCygApzuSa+jSiRMJsPO8KNTrCCR7nqmuCWd2 sPqoon/U7t6IASWt67xX9K7AChFFrDjvVPHBsXXA= X-Gm-Gg: ATEYQzwWQIYZT/TxjumsgdDT5YfKDMzWrh3QAGVBEQoHgeUdymmwvG6s8W5NYM68lXz AAVSUBBrT6Dtg0UWpUaoue1zk/f6890xQtK+6GvftQQqG7ir7Swb7FGYZ2UIeuKXYresQZ+I/X8 hLc3tJY9DymK2oMiHEB80L47mRbpR3eez3SO7eqJd2VZP7XciDCHarSspKjyhuPgSdTNrZEIZHI RLOle/9FuGhVs54H71CQe/mFG9jVDRn/H3DUO1VXOYRPwdnLH3fn3pvlnDoqGCDSXS7OI7XDAlr N3P9FagKcnAqUa1lz8lDcOJM2XpFn+LCOuHx31usCKhwz7kjo8A60VCbd1+P8AYwUafvrEOW X-Received: by 2002:a17:907:8e8b:b0:b98:14e:32c0 with SMTP id a640c23a62f3a-b988633c2edmr83871666b.14.1774316717666; Mon, 23 Mar 2026 18:45:17 -0700 (PDT) MIME-Version: 1.0 From: Jianghua Yang Date: Mon, 23 Mar 2026 18:44:40 -0700 X-Gm-Features: AQROBzA3e0LpJeV3fOPaKcoFsQDXnYsxTrSOHdTMPdr8J524o9Ku8CUelVmwquE Message-ID: Subject: BUG: test_ginpostinglist second itemptr check is a no-op due to copy-paste error To: pgsql-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="000000000000ad2c07064dbb4da6" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ad2c07064dbb4da6 Content-Type: multipart/alternative; boundary="000000000000ad2c05064dbb4da4" --000000000000ad2c05064dbb4da4 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, I found a copy-paste bug in src/test/modules/test_ginpostinglist/test_ginpostinglist.c. The function test_itemptr_pair() encodes a pair of item pointers and decodes them back to verify the round-trip. The two original item pointers are: orig_itemptrs[0] =3D (0, 1) orig_itemptrs[1] =3D (blk, off) After the first itemptr check (lines 68-72), there is a second check intended to verify the second decoded item pointer when ndecoded =3D=3D 2= : if (ndecoded =3D=3D 2 && !ItemPointerEquals(&orig_itemptrs[0], &decoded_itemptrs[0])) { elog(ERROR, "mismatch on second itemptr: (%u, %d) vs (%u, %d)", 0, 1, ItemPointerGetBlockNumber(&decoded_itemptrs[0]), ItemPointerGetOffsetNumber(&decoded_itemptrs[0])); } This is an exact duplicate of the first check =E2=80=94 it uses index [0] throughout, and the expected value is hardcoded as (0, 1) instead of (blk, off). As a result, any decoding error in decoded_itemptrs[1] would go undetected. This is particularly unfortunate because the whole purpose of testing a pair (as the comment at line 30-33 explains) is to exercise the varbyte delta encoding, which only applies to the second and subsequent item pointers. The broken check defeats exactly that goal. The attached patch fixes the second check to compare orig_itemptrs[1] with decoded_itemptrs[1] and reports (blk, off) as the expected value in the error message. Regards, Jianghua Yang --000000000000ad2c05064dbb4da4 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
=C2=A0Hi,

=C2=A0 I found a copy-paste bug in src/te= st/modules/test_ginpostinglist/test_ginpostinglist.c.

=C2=A0 The fun= ction test_itemptr_pair() encodes a pair of item pointers and
=C2=A0 dec= odes them back to verify the round-trip. The two original item
=C2=A0 po= inters are:

=C2=A0 orig_itemptrs[0] =3D (0, 1)
=C2=A0 orig_itempt= rs[1] =3D (blk, off)

=C2=A0 After the first itemptr check (lines 68-= 72), there is a second check
=C2=A0 intended to verify the second decode= d item pointer when ndecoded =3D=3D 2:

=C2=A0 if (ndecoded =3D=3D 2 = &&
=C2=A0 =C2=A0 =C2=A0 !ItemPointerEquals(&orig_itemptrs[0]= , &decoded_itemptrs[0]))
=C2=A0 {
=C2=A0 =C2=A0 =C2=A0 elog(ERROR= , "mismatch on second itemptr: (%u, %d) vs (%u, %d)",
=C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A00, 1,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0ItemPointerGetBlockNumber(&decoded_itemptrs[0]),
=C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ItemPointerGetOffsetNumber(&decoded_i= temptrs[0]));
=C2=A0 }

=C2=A0 This is an exact duplicate of the f= irst check =E2=80=94 it uses index [0]
=C2=A0 throughout, and the expect= ed value is hardcoded as (0, 1) instead of
=C2=A0 (blk, off). As a resul= t, any decoding error in decoded_itemptrs[1]
=C2=A0 would go undetected.=

=C2=A0 This is particularly unfortunate because the whole purpose o= f testing a
=C2=A0 pair (as the comment at line 30-33 explains) is to ex= ercise the varbyte
=C2=A0 delta encoding, which only applies to the seco= nd and subsequent item
=C2=A0 pointers. The broken check defeats exactly= that goal.

=C2=A0 The attached patch fixes the second check to comp= are orig_itemptrs[1]
=C2=A0 with decoded_itemptrs[1] and reports (blk, o= ff) as the expected
=C2=A0 value in the error message.

=C2=A0 Reg= ards,
=C2=A0 Jianghua Yang
--000000000000ad2c05064dbb4da4-- --000000000000ad2c07064dbb4da6 Content-Type: application/octet-stream; name="v1-0001-Fix-copy-paste-error-in-test_ginpostinglist-secon.patch" Content-Disposition: attachment; filename="v1-0001-Fix-copy-paste-error-in-test_ginpostinglist-secon.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn3yb71h0 RnJvbSBkZGEzYzY2MTFlZjVmZDRhNjE5YjgyODRlNTZhOTkwYjllMGZlZmU3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKaWFuZ2h1YSBZYW5nIDx5amhqc3R6QGdtYWlsLmNvbT4KRGF0 ZTogTW9uLCAyMyBNYXIgMjAyNiAxODoyOTo1NCAtMDcwMApTdWJqZWN0OiBbUEFUQ0ggdjFdIEZp eCBjb3B5LXBhc3RlIGVycm9yIGluIHRlc3RfZ2lucG9zdGluZ2xpc3Qgc2Vjb25kIGl0ZW1wdHIK IGNoZWNrCgpUaGUgY2hlY2sgZm9yIGEgbWlzbWF0Y2ggb24gdGhlIHNlY29uZCBkZWNvZGVkIGl0 ZW0gcG9pbnRlciB3YXMgYW4KZXhhY3QgY29weSBvZiB0aGUgZmlyc3QgaXRlbSBwb2ludGVyIGNo ZWNrLCBjb21wYXJpbmcgb3JpZ19pdGVtcHRyc1swXQp3aXRoIGRlY29kZWRfaXRlbXB0cnNbMF0g aW5zdGVhZCBvZiBvcmlnX2l0ZW1wdHJzWzFdIHdpdGgKZGVjb2RlZF9pdGVtcHRyc1sxXS4gIFRo ZSBlcnJvciBtZXNzYWdlIGFsc28gcmVwb3J0ZWQgKDAsIDEpIGFzIHRoZQpleHBlY3RlZCB2YWx1 ZSBpbnN0ZWFkIG9mIChibGssIG9mZikuICBBcyBhIHJlc3VsdCwgYW55IGRlY29kaW5nIGVycm9y CmluIHRoZSBzZWNvbmQgaXRlbSBwb2ludGVyICh3aGVyZSB0aGUgdmFyYnl0ZSBkZWx0YSBlbmNv ZGluZyBpcwpleGVyY2lzZWQpIHdvdWxkIGdvIHVuZGV0ZWN0ZWQuCgpBdXRob3I6IEppYW5naHVh IFlhbmcgPHlqaGpzdHpAZ21haWwuY29tPgotLS0KIC4uLi9tb2R1bGVzL3Rlc3RfZ2lucG9zdGlu Z2xpc3QvdGVzdF9naW5wb3N0aW5nbGlzdC5jICAgICB8IDggKysrKy0tLS0KIDEgZmlsZSBjaGFu Z2VkLCA0IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvbW9kdWxlcy90ZXN0X2dpbnBvc3RpbmdsaXN0L3Rlc3RfZ2lucG9zdGluZ2xpc3QuYyBiL3Ny Yy90ZXN0L21vZHVsZXMvdGVzdF9naW5wb3N0aW5nbGlzdC90ZXN0X2dpbnBvc3RpbmdsaXN0LmMK aW5kZXggODNjZjM0Njk4ODYuLjZkODQzNjRmNWM1IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1 bGVzL3Rlc3RfZ2lucG9zdGluZ2xpc3QvdGVzdF9naW5wb3N0aW5nbGlzdC5jCisrKyBiL3NyYy90 ZXN0L21vZHVsZXMvdGVzdF9naW5wb3N0aW5nbGlzdC90ZXN0X2dpbnBvc3RpbmdsaXN0LmMKQEAg LTcyLDEyICs3MiwxMiBAQCB0ZXN0X2l0ZW1wdHJfcGFpcihCbG9ja051bWJlciBibGssIE9mZnNl dE51bWJlciBvZmYsIGludCBtYXhzaXplKQogCQkJIEl0ZW1Qb2ludGVyR2V0T2Zmc2V0TnVtYmVy KCZkZWNvZGVkX2l0ZW1wdHJzWzBdKSk7CiAKIAlpZiAobmRlY29kZWQgPT0gMiAmJgotCQkhSXRl bVBvaW50ZXJFcXVhbHMoJm9yaWdfaXRlbXB0cnNbMF0sICZkZWNvZGVkX2l0ZW1wdHJzWzBdKSkK KwkJIUl0ZW1Qb2ludGVyRXF1YWxzKCZvcmlnX2l0ZW1wdHJzWzFdLCAmZGVjb2RlZF9pdGVtcHRy c1sxXSkpCiAJewogCQllbG9nKEVSUk9SLCAibWlzbWF0Y2ggb24gc2Vjb25kIGl0ZW1wdHI6ICgl dSwgJWQpIHZzICgldSwgJWQpIiwKLQkJCSAwLCAxLAotCQkJIEl0ZW1Qb2ludGVyR2V0QmxvY2tO dW1iZXIoJmRlY29kZWRfaXRlbXB0cnNbMF0pLAotCQkJIEl0ZW1Qb2ludGVyR2V0T2Zmc2V0TnVt YmVyKCZkZWNvZGVkX2l0ZW1wdHJzWzBdKSk7CisJCQkgYmxrLCBvZmYsCisJCQkgSXRlbVBvaW50 ZXJHZXRCbG9ja051bWJlcigmZGVjb2RlZF9pdGVtcHRyc1sxXSksCisJCQkgSXRlbVBvaW50ZXJH ZXRPZmZzZXROdW1iZXIoJmRlY29kZWRfaXRlbXB0cnNbMV0pKTsKIAl9CiB9CiAKLS0gCjIuNTAu MSAoQXBwbGUgR2l0LTE1NSkKCg== --000000000000ad2c07064dbb4da6--