summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Geoghegan2024-08-26 15:29:15 +0000
committerPeter Geoghegan2024-08-26 15:29:15 +0000
commit09a8407dbfd848301cd2c9801c3b4d75adc6cabc (patch)
tree46d022c2976d08386e83555173b35149c0a162c3
parentdbe37f1adb9fd10dc273ccf50816895360bcbc15 (diff)
Fix nbtree lookahead overflow bug.
Add bounds checking to nbtree's lookahead/skip-within-a-page mechanism. Otherwise it's possible for cases with lots of before-array-keys tuples to overflow an int16 variable, causing the mechanism to generate an out of bounds page offset number. Oversight in commit 5bf748b8, which enhanced nbtree ScalarArrayOp execution. Reported-By: Alexander Lakhin <[email protected]> Discussion: https://postgr.es/m/[email protected] Backpatch: 17-, where nbtree SAOP execution was enhanced.
-rw-r--r--src/backend/access/nbtree/nbtutils.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/backend/access/nbtree/nbtutils.c b/src/backend/access/nbtree/nbtutils.c
index d6de2072d4..c22ccec789 100644
--- a/src/backend/access/nbtree/nbtutils.c
+++ b/src/backend/access/nbtree/nbtutils.c
@@ -4091,7 +4091,7 @@ _bt_checkkeys_look_ahead(IndexScanDesc scan, BTReadPageState *pstate,
*/
if (!pstate->targetdistance)
pstate->targetdistance = LOOK_AHEAD_DEFAULT_DISTANCE;
- else
+ else if (pstate->targetdistance < MaxIndexTuplesPerPage / 2)
pstate->targetdistance *= 2;
/* Don't read past the end (or before the start) of the page, though */