aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/jsonb_util.c
diff options
context:
space:
mode:
authorTomas Vondra <tomas.vondra@postgresql.org>2023-03-29 00:50:34 +0200
committerTomas Vondra <tomas.vondra@postgresql.org>2023-03-29 02:34:48 +0200
commit00d9dcf5bebbb355152a60f0e2120cdf7f9e7ddd (patch)
tree199f23c6602e7fcd3f562d4e7ab0bde58f35ac8c /src/backend/utils/adt/jsonb_util.c
parent1671f990dd669c0b72e45c7bef0fd579a10676ed (diff)
downloadpostgresql-00d9dcf5bebbb355152a60f0e2120cdf7f9e7ddd.tar.gz
postgresql-00d9dcf5bebbb355152a60f0e2120cdf7f9e7ddd.zip
pg_dump: Fix gzip compression of empty data
The pg_dump Compressor API has three basic callbacks - Allocate, Write and End. The gzip implementation (since e9960732a) wrongly assumed the Write function would always be called, and deferred the initialization of the internal compression system until the first such call. But when there's no data to compress (e.g. for empty LO), this would result in not finalizing the compression state (because it was not actually initialized), producing invalid dump. Fixed by initializing the internal compression system in the Allocate call, whenever the caller provides the Write. For decompression the state is not needed, so we leave the private_data member unpopulated. Introduces a pg_dump TAP test compressing an empty large object. This also rearranges the functions to their original order, to make diffs against older code simpler to understand. Finally, replace an unreachable pg_fatal() with a simple assert check. Reported-by: Justin Pryzby Author: Justin Pryzby, Georgios Kokolatos Reviewed-by: Georgios Kokolatos, Tomas Vondra https://postgr.es/m/20230228235834.GC30529%40telsasoft.com
Diffstat (limited to 'src/backend/utils/adt/jsonb_util.c')
0 files changed, 0 insertions, 0 deletions