diff options
author | Alexander Korotkov <akorotkov@postgresql.org> | 2021-12-13 17:17:33 +0300 |
---|---|---|
committer | Alexander Korotkov <akorotkov@postgresql.org> | 2021-12-13 17:20:07 +0300 |
commit | 7615edd1db92b0bf909037480e8d9fcdb1be5f4b (patch) | |
tree | 53700aa5e4812c26e40074b1b0a077efbce3da3b /src/backend | |
parent | a04fc56d03b33780612cf7630bb3f1a9388a9a02 (diff) | |
download | postgresql-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.c | 3 |
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); |