aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/backend/access/heap/tuptoaster.c11
-rw-r--r--src/backend/utils/adt/Makefile4
-rw-r--r--src/common/Makefile3
-rw-r--r--src/common/pg_lzcompress.c (renamed from src/backend/utils/adt/pg_lzcompress.c)21
-rw-r--r--src/include/common/pg_lzcompress.h (renamed from src/include/utils/pg_lzcompress.h)4
-rw-r--r--src/tools/msvc/Mkvcbuild.pm3
6 files changed, 29 insertions, 17 deletions
diff --git a/src/backend/access/heap/tuptoaster.c b/src/backend/access/heap/tuptoaster.c
index d230387c859..c91bdc0d3f5 100644
--- a/src/backend/access/heap/tuptoaster.c
+++ b/src/backend/access/heap/tuptoaster.c
@@ -37,7 +37,7 @@
#include "catalog/catalog.h"
#include "miscadmin.h"
#include "utils/fmgroids.h"
-#include "utils/pg_lzcompress.h"
+#include "common/pg_lzcompress.h"
#include "utils/rel.h"
#include "utils/typcache.h"
#include "utils/tqual.h"
@@ -142,7 +142,8 @@ heap_tuple_untoast_attr(struct varlena * attr)
attr = (struct varlena *) palloc(PGLZ_RAW_SIZE(tmp) + VARHDRSZ);
SET_VARSIZE(attr, PGLZ_RAW_SIZE(tmp) + VARHDRSZ);
- pglz_decompress(tmp, VARDATA(attr));
+ if (!pglz_decompress(tmp, VARDATA(attr)))
+ elog(ERROR, "compressed data is corrupted");
pfree(tmp);
}
}
@@ -167,7 +168,8 @@ heap_tuple_untoast_attr(struct varlena * attr)
attr = (struct varlena *) palloc(PGLZ_RAW_SIZE(tmp) + VARHDRSZ);
SET_VARSIZE(attr, PGLZ_RAW_SIZE(tmp) + VARHDRSZ);
- pglz_decompress(tmp, VARDATA(attr));
+ if (!pglz_decompress(tmp, VARDATA(attr)))
+ elog(ERROR, "compressed data is corrupted");
}
else if (VARATT_IS_SHORT(attr))
{
@@ -239,7 +241,8 @@ heap_tuple_untoast_attr_slice(struct varlena * attr,
preslice = (struct varlena *) palloc(size);
SET_VARSIZE(preslice, size);
- pglz_decompress(tmp, VARDATA(preslice));
+ if (!pglz_decompress(tmp, VARDATA(preslice)))
+ elog(ERROR, "compressed data is corrupted");
if (tmp != (PGLZ_Header *) attr)
pfree(tmp);
diff --git a/src/backend/utils/adt/Makefile b/src/backend/utils/adt/Makefile
index 3ea9bf435a3..20e5ff10c7f 100644
--- a/src/backend/utils/adt/Makefile
+++ b/src/backend/utils/adt/Makefile
@@ -25,8 +25,8 @@ OBJS = acl.o arrayfuncs.o array_selfuncs.o array_typanalyze.o \
jsonfuncs.o like.o lockfuncs.o mac.o misc.o nabstime.o name.o \
network.o network_gist.o network_selfuncs.o \
numeric.o numutils.o oid.o oracle_compat.o \
- orderedsetaggs.o pg_lzcompress.o pg_locale.o pg_lsn.o \
- pgstatfuncs.o pseudotypes.o quote.o rangetypes.o rangetypes_gist.o \
+ orderedsetaggs.o pg_locale.o pg_lsn.o pgstatfuncs.o \
+ pseudotypes.o quote.o rangetypes.o rangetypes_gist.o \
rangetypes_selfuncs.o rangetypes_spgist.o rangetypes_typanalyze.o \
regexp.o regproc.o ri_triggers.o rowtypes.o ruleutils.o \
selfuncs.o tid.o timestamp.o trigfuncs.o \
diff --git a/src/common/Makefile b/src/common/Makefile
index 7edbaaa2c1a..bd77c1da8c3 100644
--- a/src/common/Makefile
+++ b/src/common/Makefile
@@ -23,7 +23,8 @@ include $(top_builddir)/src/Makefile.global
override CPPFLAGS := -DFRONTEND $(CPPFLAGS)
LIBS += $(PTHREAD_LIBS)
-OBJS_COMMON = exec.o pgfnames.o psprintf.o relpath.o rmtree.o username.o wait_error.o
+OBJS_COMMON = exec.o pg_lzcompress.o pgfnames.o psprintf.o relpath.o \
+ rmtree.o username.o wait_error.o
OBJS_FRONTEND = $(OBJS_COMMON) fe_memutils.o
diff --git a/src/backend/utils/adt/pg_lzcompress.c b/src/common/pg_lzcompress.c
index fe088901f03..9f97c362d18 100644
--- a/src/backend/utils/adt/pg_lzcompress.c
+++ b/src/common/pg_lzcompress.c
@@ -27,7 +27,7 @@
* FALSE if not; in the latter case the contents of dest
* are undefined.
*
- * void
+ * bool
* pglz_decompress(const PGLZ_Header *source, char *dest)
*
* source is the compressed input.
@@ -40,6 +40,10 @@
* The data is written to buff exactly as it was handed
* to pglz_compress(). No terminating zero byte is added.
*
+ * The return value is TRUE if decompression succeeded,
+ * FALSE if not; in the latter case the contents of dest
+ * are undefined.
+ *
* The decompression algorithm and internal data format:
*
* PGLZ_Header is defined as
@@ -169,14 +173,14 @@
*
* Copyright (c) 1999-2014, PostgreSQL Global Development Group
*
- * src/backend/utils/adt/pg_lzcompress.c
+ * src/common/pg_lzcompress.c
* ----------
*/
#include "postgres.h"
#include <limits.h>
-#include "utils/pg_lzcompress.h"
+#include "common/pg_lzcompress.h"
/* ----------
@@ -492,7 +496,8 @@ pglz_find_match(int16 *hstart, const char *input, const char *end,
/* ----------
* pglz_compress -
*
- * Compresses source into dest using strategy.
+ * Compresses source into dest using strategy. Returns false if a failure
+ * occurred, true in case of success.
* ----------
*/
bool
@@ -678,10 +683,11 @@ pglz_compress(const char *source, int32 slen, PGLZ_Header *dest,
/* ----------
* pglz_decompress -
*
- * Decompresses source into dest.
+ * Decompresses source into dest. Returns false if a failure
+ * occurred, true in case of success.
* ----------
*/
-void
+bool
pglz_decompress(const PGLZ_Header *source, char *dest)
{
const unsigned char *sp;
@@ -771,9 +777,10 @@ pglz_decompress(const PGLZ_Header *source, char *dest)
* Check we decompressed the right amount.
*/
if (dp != destend || sp != srcend)
- elog(ERROR, "compressed data is corrupt");
+ return false;
/*
* That's it.
*/
+ return true;
}
diff --git a/src/include/utils/pg_lzcompress.h b/src/include/common/pg_lzcompress.h
index 4af24a32a49..f36d2da8eea 100644
--- a/src/include/utils/pg_lzcompress.h
+++ b/src/include/common/pg_lzcompress.h
@@ -3,7 +3,7 @@
*
* Definitions for the builtin LZ compressor
*
- * src/include/utils/pg_lzcompress.h
+ * src/include/common/pg_lzcompress.h
* ----------
*/
@@ -107,6 +107,6 @@ extern const PGLZ_Strategy *const PGLZ_strategy_always;
*/
extern bool pglz_compress(const char *source, int32 slen, PGLZ_Header *dest,
const PGLZ_Strategy *strategy);
-extern void pglz_decompress(const PGLZ_Header *source, char *dest);
+extern bool pglz_decompress(const PGLZ_Header *source, char *dest);
#endif /* _PG_LZCOMPRESS_H_ */
diff --git a/src/tools/msvc/Mkvcbuild.pm b/src/tools/msvc/Mkvcbuild.pm
index 004942ca07a..6779b18300a 100644
--- a/src/tools/msvc/Mkvcbuild.pm
+++ b/src/tools/msvc/Mkvcbuild.pm
@@ -76,7 +76,8 @@ sub mkvcbuild
push(@pgportfiles, 'rint.c') if ($vsVersion < '12.00');
our @pgcommonallfiles = qw(
- exec.c pgfnames.c psprintf.c relpath.c rmtree.c username.c wait_error.c);
+ exec.c pg_lzcompress.c pgfnames.c psprintf.c relpath.c rmtree.c
+ username.c wait_error.c);
our @pgcommonfrontendfiles = (@pgcommonallfiles, qw(fe_memutils.c));