74 lines
2.8 KiB
Diff
74 lines
2.8 KiB
Diff
|
From b020863a3ea18488448bc09234a4e3b26b68058d Mon Sep 17 00:00:00 2001
|
||
|
From: Sven Klemm <sven@timescale.com>
|
||
|
Date: Sat, 19 Sep 2020 19:17:38 +0200
|
||
|
Subject: [PATCH] Add compatibilty wrapper functions for base64
|
||
|
encoding/decoding
|
||
|
|
||
|
PG13 adds a destination length 4th argument to pg_b64_decode and
|
||
|
pg_b64_encode functions so this patch adds a macro that translates
|
||
|
to the 3 argument and 4 argument calls depending on postgres version.
|
||
|
This patch also adds checking of return values for those functions.
|
||
|
|
||
|
https://github.com/postgres/postgres/commit/cfc40d384a
|
||
|
|
||
|
Signed-off-by: Maxim Kochetkov <fido_max@inbox.ru>
|
||
|
Fetch from: https://github.com/timescale/timescaledb/commit/002510cb01e1d09767a526560f89c1857c1738a2.patch
|
||
|
---
|
||
|
src/compat.h | 11 +++++++++++
|
||
|
tsl/src/compression/compression.c | 12 ++++++++++--
|
||
|
2 files changed, 21 insertions(+), 2 deletions(-)
|
||
|
|
||
|
diff --git a/src/compat.h b/src/compat.h
|
||
|
index 267bb09a..d84f8754 100644
|
||
|
--- a/src/compat.h
|
||
|
+++ b/src/compat.h
|
||
|
@@ -347,4 +347,15 @@ get_vacuum_options(const VacuumStmt *stmt)
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
+/* PG13 added a dstlen parameter to pg_b64_decode and pg_b64_encode */
|
||
|
+#if PG13_LT
|
||
|
+#define pg_b64_encode_compat(src, srclen, dst, dstlen) pg_b64_encode((src), (srclen), (dst))
|
||
|
+#define pg_b64_decode_compat(src, srclen, dst, dstlen) pg_b64_decode((src), (srclen), (dst))
|
||
|
+#else
|
||
|
+#define pg_b64_encode_compat(src, srclen, dst, dstlen) \
|
||
|
+ pg_b64_encode((src), (srclen), (dst), (dstlen))
|
||
|
+#define pg_b64_decode_compat(src, srclen, dst, dstlen) \
|
||
|
+ pg_b64_decode((src), (srclen), (dst), (dstlen))
|
||
|
+#endif
|
||
|
+
|
||
|
#endif /* TIMESCALEDB_COMPAT_H */
|
||
|
diff --git a/tsl/src/compression/compression.c b/tsl/src/compression/compression.c
|
||
|
index 470ec4b9..169f74e9 100644
|
||
|
--- a/tsl/src/compression/compression.c
|
||
|
+++ b/tsl/src/compression/compression.c
|
||
|
@@ -1424,7 +1424,11 @@ tsl_compressed_data_in(PG_FUNCTION_ARGS)
|
||
|
|
||
|
decoded_len = pg_b64_dec_len(input_len);
|
||
|
decoded = palloc(decoded_len + 1);
|
||
|
- decoded_len = pg_b64_decode(input, input_len, decoded);
|
||
|
+ decoded_len = pg_b64_decode_compat(input, input_len, decoded, decoded_len);
|
||
|
+
|
||
|
+ if (decoded_len < 0)
|
||
|
+ elog(ERROR, "could not decode base64-encoded compressed data");
|
||
|
+
|
||
|
decoded[decoded_len] = '\0';
|
||
|
data = (StringInfoData){
|
||
|
.data = decoded,
|
||
|
@@ -1446,7 +1450,11 @@ tsl_compressed_data_out(PG_FUNCTION_ARGS)
|
||
|
const char *raw_data = VARDATA(bytes);
|
||
|
int encoded_len = pg_b64_enc_len(raw_len);
|
||
|
char *encoded = palloc(encoded_len + 1);
|
||
|
- encoded_len = pg_b64_encode(raw_data, raw_len, encoded);
|
||
|
+ encoded_len = pg_b64_encode_compat(raw_data, raw_len, encoded, encoded_len);
|
||
|
+
|
||
|
+ if (encoded_len < 0)
|
||
|
+ elog(ERROR, "could not base64-encode compressed data");
|
||
|
+
|
||
|
encoded[encoded_len] = '\0';
|
||
|
|
||
|
PG_RETURN_CSTRING(encoded);
|
||
|
--
|
||
|
2.29.2
|
||
|
|