/
githubmirror
/
postgres
Обзор
Документация
Войти
/
githubmirror
/
postgres
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/test/regress/sql/compression_pglz.sql
63 строки
2 KB
Michael Paquier
Add more tests for corrupted data with pglz_decompress()
13 май 2026, 08:43
13 май 2026, 08:43
900c07b
Код
Авторство
О чём код?
-- -- Tests for PGLZ compression -- -- directory paths and dlsuffix are passed to us in environment variables \getenv libdir PG_LIBDIR \getenv dlsuffix PG_DLSUFFIX \set regresslib :libdir '/regress' :dlsuffix CREATE FUNCTION test_pglz_compress(bytea) RETURNS bytea AS :'regresslib' LANGUAGE C STRICT; CREATE FUNCTION test_pglz_decompress(bytea, int4, bool) RETURNS bytea AS :'regresslib' LANGUAGE C STRICT; -- Round-trip with pglz: compress then decompress. SELECT test_pglz_decompress(test_pglz_compress( decode(repeat('abcd', 100), 'escape')), 400, false) = decode(repeat('abcd', 100), 'escape') AS roundtrip_ok; SELECT test_pglz_decompress(test_pglz_compress( decode(repeat('abcd', 100), 'escape')), 400, true) = decode(repeat('abcd', 100), 'escape') AS roundtrip_ok; -- Decompression with rawsize too large, fails to fill the destination -- buffer. SELECT test_pglz_decompress(test_pglz_compress( decode(repeat('abcd', 100), 'escape')), 500, true); -- Decompression with rawsize too small, fails with source not fully -- consumed. SELECT test_pglz_decompress(test_pglz_compress( decode(repeat('abcd', 100), 'escape')), 100, true); -- Corrupted compressed data. Set control bit with read of a match tag, -- no data follows. SELECT length(test_pglz_decompress('\x01'::bytea, 1024, false)) AS ctrl_only_len; SELECT test_pglz_decompress('\x01'::bytea, 1024, true); -- Corrupted compressed data. Set control bit with read of a match tag, -- 1 byte follows. SELECT test_pglz_decompress('\x01ff'::bytea, 1024, false); SELECT test_pglz_decompress('\x01ff'::bytea, 1024, true); -- Corrupted compressed data. Set control bit with match tag where length -- nibble is 3 bytes (extended length), no data follows. 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;