diff options
author | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2018-04-09 10:54:28 -0300 |
---|---|---|
committer | Alvaro Herrera <alvherre@alvh.no-ip.org> | 2018-04-09 10:54:28 -0300 |
commit | 7ba6ee815dc90d4fab7226d343bf72aa28c9aa5c (patch) | |
tree | 4843b76976bbe3386849c890236efbcc448ac3ad | |
parent | 2c19ea863a27303f462485c4046a850864e638b8 (diff) | |
download | postgresql-7ba6ee815dc90d4fab7226d343bf72aa28c9aa5c.tar.gz postgresql-7ba6ee815dc90d4fab7226d343bf72aa28c9aa5c.zip |
Add missed bms_copy() in perform_pruning_combine_step
We were initializing a BMS to merely reference an existing one, which
would cause a double-free (and a crash) when the recursive algorithm
tried to intersect it with an empty one. Fix it by creating a copy at
initialization time.
Reported-by: sqlsmith (by way of Andreas Seltenreich)
Author: Amit Langote
Discussion: https://postgr.es/m/87in923lyw.fsf@ansel.ydns.eu
-rw-r--r-- | src/backend/partitioning/partprune.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/backend/partitioning/partprune.c b/src/backend/partitioning/partprune.c index 417e1fee815..7666c6c412d 100644 --- a/src/backend/partitioning/partprune.c +++ b/src/backend/partitioning/partprune.c @@ -2923,7 +2923,8 @@ perform_pruning_combine_step(PartitionPruneContext *context, if (firststep) { /* Copy step's result the first time. */ - result->bound_offsets = step_result->bound_offsets; + result->bound_offsets = + bms_copy(step_result->bound_offsets); result->scan_null = step_result->scan_null; result->scan_default = step_result->scan_default; firststep = false; |