diff options
| author | Alvaro Herrera | 2018-07-30 21:03:19 +0000 |
|---|---|---|
| committer | Alvaro Herrera | 2018-07-30 22:45:39 +0000 |
| commit | d25d45e4d9221948e6b0d80ce22ce559e99c2f48 (patch) | |
| tree | ef84c7447dbd667e20a982ecfe2f68c05259e0ec /src/backend/partitioning | |
| parent | 1b68010518c9d2ede24e6c721a9c0dc82c358fb1 (diff) | |
Verify range bounds to bms_add_range when necessary
Now that the bms_add_range boundary protections are gone, some
alternative ones are needed in a few places.
Author: Amit Langote <Langote_Amit_f8@lab.ntt.co.jp>
Discussion: https://postgr.es/m/3437ccf8-a144-55ff-1e2f-fc16b437823b@lab.ntt.co.jp
Diffstat (limited to 'src/backend/partitioning')
| -rw-r--r-- | src/backend/partitioning/partprune.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/backend/partitioning/partprune.c b/src/backend/partitioning/partprune.c index 354eb0d4e60..bfacc2ce297 100644 --- a/src/backend/partitioning/partprune.c +++ b/src/backend/partitioning/partprune.c @@ -486,7 +486,10 @@ get_matching_partitions(PartitionPruneContext *context, List *pruning_steps) /* If there are no pruning steps then all partitions match. */ if (num_steps == 0) + { + Assert(context->nparts > 0); return bms_add_range(NULL, 0, context->nparts - 1); + } /* * Allocate space for individual pruning steps to store its result. Each @@ -2048,8 +2051,12 @@ get_matching_hash_bounds(PartitionPruneContext *context, bms_make_singleton(rowHash % greatest_modulus); } else + { + /* Getting here means at least one hash partition exists. */ + Assert(boundinfo->ndatums > 0); result->bound_offsets = bms_add_range(NULL, 0, boundinfo->ndatums - 1); + } /* * There is neither a special hash null partition or the default hash @@ -2128,6 +2135,7 @@ get_matching_list_bounds(PartitionPruneContext *context, */ if (nvalues == 0) { + Assert(boundinfo->ndatums > 0); result->bound_offsets = bms_add_range(NULL, 0, boundinfo->ndatums - 1); result->scan_default = partition_bound_has_default(boundinfo); @@ -2140,6 +2148,7 @@ get_matching_list_bounds(PartitionPruneContext *context, /* * First match to all bounds. We'll remove any matching datums below. */ + Assert(boundinfo->ndatums > 0); result->bound_offsets = bms_add_range(NULL, 0, boundinfo->ndatums - 1); @@ -2250,6 +2259,7 @@ get_matching_list_bounds(PartitionPruneContext *context, break; } + Assert(minoff >= 0 && maxoff >= 0); result->bound_offsets = bms_add_range(NULL, minoff, maxoff); return result; } @@ -2327,6 +2337,7 @@ get_matching_range_bounds(PartitionPruneContext *context, maxoff--; result->scan_default = partition_bound_has_default(boundinfo); + Assert(minoff >= 0 && maxoff >= 0); result->bound_offsets = bms_add_range(NULL, minoff, maxoff); return result; |
