0001-Add-more-tests-for-corrupted-data-in-pglz_decompress.patch

text/plain

Filename: 0001-Add-more-tests-for-corrupted-data-in-pglz_decompress.patch
Type: text/plain
Part: 0
Message: Plug-in coverage hole for pglz_decompress()

Patch

Same data as JSON: GET /api/v1/attachments/:id/patch the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes. API reference →
Format: format-patch
Series: patch 0001
Subject: Add more tests for corrupted data in pglz_decompress()
File+
src/test/regress/expected/compression_pglz.out 12 0
src/test/regress/sql/compression_pglz.sql 10 0
From 4a63b443e241e98df27489ac04291822f4a56bc5 Mon Sep 17 00:00:00 2001
From: Michael Paquier <michael@paquier.xyz>
Date: Mon, 11 May 2026 15:21:30 +0900
Subject: [PATCH] Add more tests for corrupted data in pglz_decompress()

Two cases fixed by 2b5ba2a0a141 were not covered, emulating corrupted
data:
- Set control bit with a valid 2-byte match tag where offset is 0.
- Set control bit with a valid 2-byte match tag where offset exceeds
output written.

Oversight in 67d318e70402.

Backpatch-through: 14
---
 src/test/regress/expected/compression_pglz.out | 12 ++++++++++++
 src/test/regress/sql/compression_pglz.sql      | 10 ++++++++++
 2 files changed, 22 insertions(+)

diff --git a/src/test/regress/expected/compression_pglz.out b/src/test/regress/expected/compression_pglz.out
index 0ef49d425068..066a3317c65d 100644
--- a/src/test/regress/expected/compression_pglz.out
+++ b/src/test/regress/expected/compression_pglz.out
@@ -60,6 +60,18 @@ SELECT test_pglz_decompress('\x010f01'::bytea, 1024, false);
 ERROR:  pglz_decompress failed
 SELECT test_pglz_decompress('\x010f01'::bytea, 1024, true);
 ERROR:  pglz_decompress failed
+-- Corrupted compressed data.  Set control bit with a valid 2-byte match
+-- tag where offset exceeds output written.
+SELECT test_pglz_decompress('\x011001'::bytea, 1024, false);
+ERROR:  pglz_decompress failed
+SELECT test_pglz_decompress('\x011001'::bytea, 1024, true);
+ERROR:  pglz_decompress failed
+-- Corrupted compressed data.  Set control bit with a valid 2-byte match
+-- tag where offset is 0.
+SELECT test_pglz_decompress('\x010300'::bytea, 1024, false);
+ERROR:  pglz_decompress failed
+SELECT test_pglz_decompress('\x010300'::bytea, 1024, true);
+ERROR:  pglz_decompress failed
 -- Clean up
 DROP FUNCTION test_pglz_compress;
 DROP FUNCTION test_pglz_decompress;
diff --git a/src/test/regress/sql/compression_pglz.sql b/src/test/regress/sql/compression_pglz.sql
index a44af02afb7b..dbd37f7d4eb2 100644
--- a/src/test/regress/sql/compression_pglz.sql
+++ b/src/test/regress/sql/compression_pglz.sql
@@ -48,6 +48,16 @@ SELECT test_pglz_decompress('\x01ff'::bytea, 1024, true);
 SELECT test_pglz_decompress('\x010f01'::bytea, 1024, false);
 SELECT test_pglz_decompress('\x010f01'::bytea, 1024, true);
 
+-- Corrupted compressed data.  Set control bit with a valid 2-byte match
+-- tag where offset exceeds output written.
+SELECT test_pglz_decompress('\x011001'::bytea, 1024, false);
+SELECT test_pglz_decompress('\x011001'::bytea, 1024, true);
+
+-- Corrupted compressed data.  Set control bit with a valid 2-byte match
+-- tag where offset is 0.
+SELECT test_pglz_decompress('\x010300'::bytea, 1024, false);
+SELECT test_pglz_decompress('\x010300'::bytea, 1024, true);
+
 -- Clean up
 DROP FUNCTION test_pglz_compress;
 DROP FUNCTION test_pglz_decompress;
-- 
2.54.0