Remove obsolete name_ops index-only scan comments. master github/master
authorPeter Geoghegan <[email protected]>
Sun, 21 Dec 2025 17:27:38 +0000 (12:27 -0500)
committerPeter Geoghegan <[email protected]>
Sun, 21 Dec 2025 17:27:38 +0000 (12:27 -0500)
nbtree index-only scans of an index that uses btree/name_ops as one of
its index column's input opclasses are no longer at any risk of reading
past the end of currTuples.  We're no longer reliant on such scans being
able to at least read from the start of markTuples storage (which uses
space from the same allocation as currTuples) to avoid a segfault:
StoreIndexTuple (from nodeIndexonlyscan.c) won't actually read past the
end of a cstring datum from a name_ops index.  In other words, we
already have the "special-case treatment for name_ops" that the removed
comment supposed we could avoid by relying on markTuples in this way.

Oversight in commit a63224be49, which added special case handling of
name_ops cstrings to StoreIndexTuple, but missed these comments.

src/backend/access/nbtree/nbtree.c

index 6197b725fb1f5c4d821b9547a2be755846c6b037..b44252319357e20ed51f94a2c9611da9ae019f07 100644 (file)
@@ -437,16 +437,6 @@ btrescan(IndexScanDesc scan, ScanKey scankey, int nscankeys,
     * not already done in a previous rescan call.  To save on palloc
     * overhead, both workspaces are allocated as one palloc block; only this
     * function and btendscan know that.
-    *
-    * NOTE: this data structure also makes it safe to return data from a
-    * "name" column, even though btree name_ops uses an underlying storage
-    * datatype of cstring.  The risk there is that "name" is supposed to be
-    * padded to NAMEDATALEN, but the actual index tuple is probably shorter.
-    * However, since we only return data out of tuples sitting in the
-    * currTuples array, a fetch of NAMEDATALEN bytes can at worst pull some
-    * data out of the markTuples array --- running off the end of memory for
-    * a SIGSEGV is not possible.  Yeah, this is ugly as sin, but it beats
-    * adding special-case treatment for name_ops elsewhere.
     */
    if (scan->xs_want_itup && so->currTuples == NULL)
    {