pgsql: Avoid fetching one past the end of translate()'s "to" parameter. - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Avoid fetching one past the end of translate()'s "to" parameter.
Date
Msg-id E1pXPLl-001N4W-NR@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Avoid fetching one past the end of translate()'s "to" parameter.

This is usually harmless, but if you were very unlucky it could
provoke a segfault due to the "to" string being right up against
the end of memory.  Found via valgrind testing (so we might've
found it earlier, except that our regression tests lacked any
exercise of translate()'s deletion feature).

Fix by switching the order of the test-for-end-of-string and
advance-pointer steps.  While here, compute "to_ptr + tolen"
just once.  (Smarter compilers might figure that out for
themselves, but let's just make sure.)

Report and fix by Daniil Anisimov, in bug #17816.

Discussion: https://postgr.es/m/17816-70f3d2764e88a108@postgresql.org

Branch
------
REL_14_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/1a9356f657e19ae1abeb0ffea0b7edaf69e315cb

Modified Files
--------------
src/backend/utils/adt/oracle_compat.c | 12 +++++++-----
src/test/regress/expected/strings.out |  6 ++++++
src/test/regress/sql/strings.sql      |  1 +
3 files changed, 14 insertions(+), 5 deletions(-)


pgsql-committers by date:

Previous
From: Tomas Vondra
Date:
Subject: pgsql: Fix condition in pg_dump TAP test
Next
From: Michael Paquier
Date:
Subject: pgsql: pageinspect: Fix crash with gist_page_items()