postgresql/src
Tom Lane b0feda79fd Fix jsonb subscripting to cope with toasted subscript values.
jsonb_get_element() was incautious enough to use VARDATA() and
VARSIZE() directly on an arbitrary text Datum.  That of course
fails if the Datum is short-header, compressed, or out-of-line.
The typical result would be failing to match any element of a
jsonb object, though matching the wrong one seems possible as well.

setPathObject() was slightly brighter, in that it used VARDATA_ANY
and VARSIZE_ANY_EXHDR, but that only kept it out of trouble for
short-header Datums.  push_path() had the same issue.  This could
result in faulty subscripted insertions, though keys long enough to
cause a problem are likely rare in the wild.

Having seen these, I looked around for unsafe usages in the rest
of the adt/json* files.  There are a couple of places where it's not
immediately obvious that the Datum can't be compressed or out-of-line,
so I added pg_detoast_datum_packed() to cope if it is.  Also, remove
some other usages of VARDATA/VARSIZE on Datums we just extracted from
a text array.  Those aren't actively broken, but they will become so
if we ever start allowing short-header array elements, which does not
seem like a terribly unreasonable thing to do.  In any case they are
not great coding examples, and they could also do with comments
pointing out that we're assuming we don't need pg_detoast_datum_packed.

Per report from exe-dealer@yandex.ru.  Patch by me, but thanks to
David Johnston for initial investigation.  Back-patch to v14 where
jsonb subscripting was introduced.

Discussion: https://postgr.es/m/205321670615953@mail.yandex.ru
2022-12-12 16:17:54 -05:00
..
backend Fix jsonb subscripting to cope with toasted subscript values. 2022-12-12 16:17:54 -05:00
bin Remove extra space from dumped ALTER DEFAULT PRIVILEGES. 2022-12-12 09:49:24 -08:00
common Convert json_in and jsonb_in to report errors softly. 2022-12-11 11:28:15 -05:00
fe_utils meson: Add support for building with precompiled headers 2022-10-06 17:19:30 -07:00
include Get rid of recursion-marker values in enum AlterTableType 2022-12-12 11:13:26 +01:00
interfaces Order getopt arguments 2022-12-12 15:20:00 +01:00
makefiles meson: Add basic PGXS compatibility 2022-12-06 18:56:46 -08:00
pl Allow building with MSVC and Strawberry perl 2022-11-25 15:28:38 -05:00
port meson: Basic cygwin support 2022-12-06 11:25:54 -08:00
template Move darwin sysroot determination into separate file 2022-09-01 16:54:19 -07:00
test Fix jsonb subscripting to cope with toasted subscript values. 2022-12-12 16:17:54 -05:00
timezone Remove unneeded includes of <sys/stat.h> 2022-11-05 12:31:28 +09:00
tools Create infrastructure for "soft" error reporting. 2022-12-09 09:58:38 -05:00
tutorial Doc: sync src/tutorial/basics.source with SGML documentation. 2022-11-19 13:09:14 -05:00
.gitignore
DEVELOPERS
Makefile Remove the option to build thread_test.c outside configure. 2020-10-21 12:08:48 -04:00
Makefile.global.in autoconf: Move export_dynamic determination to configure 2022-12-06 18:55:28 -08:00
Makefile.shlib autoconf: Rely on ar supporting index creation 2022-10-07 11:53:39 -07:00
meson.build meson: Add basic PGXS compatibility 2022-12-06 18:56:46 -08:00
nls-global.mk Fix for make unportability 2022-07-13 09:15:01 +02:00