aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSergey Uzhakov <uzhastik@gmail.com>2022-05-02 12:04:26 +0300
committerSergey Uzhakov <uzhastik@gmail.com>2022-05-02 12:04:26 +0300
commitf07a7df3e0cbb8ad22b97824ccfeebbc433b84a1 (patch)
tree5e6dcc5120ac7c6785918b5d0ce537dcd63079d8
parent6d4102c808d949679abef976da125ce9add38a4b (diff)
downloadydb-f07a7df3e0cbb8ad22b97824ccfeebbc433b84a1.tar.gz
CLOUD-95996: add pg patch 03, tune scripts
ref:edb9916f2fe9d75e1994a28567ec61761801e2ec
-rwxr-xr-xydb/library/yql/parser/pg_wrapper/copy_src.sh2
-rwxr-xr-xydb/library/yql/parser/pg_wrapper/generate_patch.sh4
-rw-r--r--ydb/library/yql/parser/pg_wrapper/patches/03.coverity.patch81
3 files changed, 86 insertions, 1 deletions
diff --git a/ydb/library/yql/parser/pg_wrapper/copy_src.sh b/ydb/library/yql/parser/pg_wrapper/copy_src.sh
index 0e3e86936dc..46a0f3fc1e1 100755
--- a/ydb/library/yql/parser/pg_wrapper/copy_src.sh
+++ b/ydb/library/yql/parser/pg_wrapper/copy_src.sh
@@ -2,5 +2,7 @@
set -eux
rm -f ../../../../../contrib/libs/postgresql/libpostgres.a
ya make ../../../../../contrib/libs/postgresql --checkout
+
+export LANG=ru_RU.UTF-8
python3 copy_src.py
for i in $(ls patches/); do (cd postgresql && patch -p1 < ../patches/$i); done
diff --git a/ydb/library/yql/parser/pg_wrapper/generate_patch.sh b/ydb/library/yql/parser/pg_wrapper/generate_patch.sh
index 28352afe0c2..8cae98d99d1 100755
--- a/ydb/library/yql/parser/pg_wrapper/generate_patch.sh
+++ b/ydb/library/yql/parser/pg_wrapper/generate_patch.sh
@@ -1,5 +1,7 @@
#!/usr/bin/env bash
-set -u
+set -eEu
+trap 'echo Script failed!' ERR
+
rm -rf postgresql.patched
cp -a postgresql postgresql.patched
./copy_src.sh > /dev/null 2>&1
diff --git a/ydb/library/yql/parser/pg_wrapper/patches/03.coverity.patch b/ydb/library/yql/parser/pg_wrapper/patches/03.coverity.patch
new file mode 100644
index 00000000000..85acdabcdd5
--- /dev/null
+++ b/ydb/library/yql/parser/pg_wrapper/patches/03.coverity.patch
@@ -0,0 +1,81 @@
+diff -ruN postgresql/src/backend/access/transam/timeline.c postgresql.patched/src/backend/access/transam/timeline.c
+--- postgresql/src/backend/access/transam/timeline.c 2022-05-01 17:51:47.220765000 +0300
++++ postgresql.patched/src/backend/access/transam/timeline.c 2022-05-01 17:51:30.428749000 +0300
+@@ -405,6 +405,7 @@
+ LSN_FORMAT_ARGS(switchpoint),
+ reason);
+
++ buffer[BLCKSZ - 1] = 0;
+ nbytes = strlen(buffer);
+ errno = 0;
+ pgstat_report_wait_start(WAIT_EVENT_TIMELINE_HISTORY_WRITE);
+diff -ruN postgresql/src/backend/access/transam/twophase.c postgresql.patched/src/backend/access/transam/twophase.c
+--- postgresql/src/backend/access/transam/twophase.c 2022-05-01 17:51:56.457044000 +0300
++++ postgresql.patched/src/backend/access/transam/twophase.c 2022-05-01 17:51:30.432134000 +0300
+@@ -1074,6 +1074,7 @@
+ &hdr.initfileinval);
+ hdr.gidlen = strlen(gxact->gid) + 1; /* Include '\0' */
+ hdr.origin_lsn = 0;
++ hdr.origin_timestamp = 0;
+
+ save_state_data(&hdr, sizeof(TwoPhaseFileHeader));
+ save_state_data(gxact->gid, hdr.gidlen);
+diff -ruN postgresql/src/backend/storage/ipc/standby.c postgresql.patched/src/backend/storage/ipc/standby.c
+--- postgresql/src/backend/storage/ipc/standby.c 2022-05-01 17:51:51.003468000 +0300
++++ postgresql.patched/src/backend/storage/ipc/standby.c 2022-05-01 17:51:30.512070000 +0300
+@@ -651,6 +651,7 @@
+ timeouts[cnt].id = STANDBY_DEADLOCK_TIMEOUT;
+ timeouts[cnt].type = TMPARAM_AFTER;
+ timeouts[cnt].delay_ms = DeadlockTimeout;
++ timeouts[cnt].fin_time = 0;
+ cnt++;
+
+ enable_timeouts(timeouts, cnt);
+diff -ruN postgresql/src/backend/utils/mmgr/dsa.c postgresql.patched/src/backend/utils/mmgr/dsa.c
+--- postgresql/src/backend/utils/mmgr/dsa.c 2022-05-01 17:51:56.486991000 +0300
++++ postgresql.patched/src/backend/utils/mmgr/dsa.c 2022-05-01 17:51:30.552088000 +0300
+@@ -839,7 +839,13 @@
+ superblock = dsa_get_address(area, span->start);
+ object = dsa_get_address(area, dp);
+ size_class = span->size_class;
+- Assert(size_class < lengthof(dsa_size_classes));
++ if (size_class >= lengthof(dsa_size_classes))
++ {
++ ereport(ERROR,
++ (errcode(ERRCODE_DATA_CORRUPTED),
++ errmsg("invalid span size"),
++ errdetail("Invalid span->size_class value %zu, but dsa_size_classes size is %zu.", size_class, lengthof(dsa_size_classes))));
++ }
+ size = dsa_size_classes[size_class];
+
+ /*
+diff -ruN postgresql/src/backend/utils/sort/tuplesort.c postgresql.patched/src/backend/utils/sort/tuplesort.c
+--- postgresql/src/backend/utils/sort/tuplesort.c 2022-05-01 17:51:53.472504000 +0300
++++ postgresql.patched/src/backend/utils/sort/tuplesort.c 2022-05-01 17:51:30.555163000 +0300
+@@ -3777,8 +3777,10 @@
+ /* Compare additional sort keys */
+ ltup.t_len = ((MinimalTuple) a->tuple)->t_len + MINIMAL_TUPLE_OFFSET;
+ ltup.t_data = (HeapTupleHeader) ((char *) a->tuple - MINIMAL_TUPLE_OFFSET);
++ ltup.t_tableOid = 0;
+ rtup.t_len = ((MinimalTuple) b->tuple)->t_len + MINIMAL_TUPLE_OFFSET;
+ rtup.t_data = (HeapTupleHeader) ((char *) b->tuple - MINIMAL_TUPLE_OFFSET);
++ rtup.t_tableOid = 0;
+ tupDesc = state->tupDesc;
+
+ if (sortKey->abbrev_converter)
+@@ -3833,6 +3835,7 @@
+ /* set up first-column key value */
+ htup.t_len = tuple->t_len + MINIMAL_TUPLE_OFFSET;
+ htup.t_data = (HeapTupleHeader) ((char *) tuple - MINIMAL_TUPLE_OFFSET);
++ htup.t_tableOid = 0;
+ original = heap_getattr(&htup,
+ state->sortKeys[0].ssup_attno,
+ state->tupDesc,
+@@ -3939,6 +3942,7 @@
+ /* set up first-column key value */
+ htup.t_len = tuple->t_len + MINIMAL_TUPLE_OFFSET;
+ htup.t_data = (HeapTupleHeader) ((char *) tuple - MINIMAL_TUPLE_OFFSET);
++ htup.t_tableOid = 0;
+ stup->datum1 = heap_getattr(&htup,
+ state->sortKeys[0].ssup_attno,
+ state->tupDesc,