]> granicus.if.org Git - postgresql/commit
Fix past pd_upper write in ginRedoRecompress()
authorAlexander Korotkov <akorotkov@postgresql.org>
Sun, 9 Sep 2018 18:19:29 +0000 (21:19 +0300)
committerAlexander Korotkov <akorotkov@postgresql.org>
Sun, 9 Sep 2018 18:29:07 +0000 (21:29 +0300)
commitbccfd381707b9d66989259b94dc79e080fa56dec
tree049388235f7e080d06cdc579e4022e5ab91b3d4c
parentaa6d0114c4d9b54dad2abd9065b4f063c517b800
Fix past pd_upper write in ginRedoRecompress()

ginRedoRecompress() replays actions over compressed segments of posting list
in-place.  However, it might lead to write past pg_upper, because intermediate
state during playing the changes can take more space than both original state
and final state.  This commit fixes that by refuse from in-place modification.
Instead page tail is copied once modification is started, and then it's used
as the source of original segments.  Backpatch to 9.4 where posting list
compression was introduced.

Reported-by: Sivasubramanian Ramasubramanian
Discussion: https://postgr.es/m/1536091151804.6588%40amazon.com
Author: Alexander Korotkov based on patch from and ideas by Sivasubramanian Ramasubramanian
Review: Sivasubramanian Ramasubramanian
Backpatch-through: 9.4
src/backend/access/gin/ginxlog.c