aboutsummaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
authorAlexander Korotkov <akorotkov@postgresql.org>2021-12-13 17:17:33 +0300
committerAlexander Korotkov <akorotkov@postgresql.org>2021-12-13 17:20:07 +0300
commit7615edd1db92b0bf909037480e8d9fcdb1be5f4b (patch)
tree53700aa5e4812c26e40074b1b0a077efbce3da3b /src/backend
parenta04fc56d03b33780612cf7630bb3f1a9388a9a02 (diff)
downloadpostgresql-7615edd1db92b0bf909037480e8d9fcdb1be5f4b.tar.gz
postgresql-7615edd1db92b0bf909037480e8d9fcdb1be5f4b.zip
Fix alignment in multirange_get_range() function
The multirange_get_range() function fails when two boundaries of the same range have different alignments. Fix that by adding proper pointer alignment. Reported-by: Alexander Lakhin Discussion: https://postgr.es/m/17300-dced2d01ddeb1f2f%40postgresql.org Backpatch-through: 14
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/utils/adt/multirangetypes.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/src/backend/utils/adt/multirangetypes.c b/src/backend/utils/adt/multirangetypes.c
index 77732155647..51b0ec95ab4 100644
--- a/src/backend/utils/adt/multirangetypes.c
+++ b/src/backend/utils/adt/multirangetypes.c
@@ -713,7 +713,10 @@ multirange_get_range(TypeCacheEntry *rangetyp,
if (RANGE_HAS_LBOUND(flags))
ptr = (Pointer) att_addlength_pointer(ptr, typlen, ptr);
if (RANGE_HAS_UBOUND(flags))
+ {
+ ptr = (Pointer) att_align_pointer(ptr, typalign, typlen, ptr);
ptr = (Pointer) att_addlength_pointer(ptr, typlen, ptr);
+ }
len = (ptr - begin) + sizeof(RangeType) + sizeof(uint8);
range = palloc0(len);