]> git.ipfire.org Git - thirdparty/postgresql.git/commit
Make json{b}_populate_recordset() use the right tuple descriptor.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 6 Nov 2017 15:29:17 +0000 (10:29 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 6 Nov 2017 15:29:40 +0000 (10:29 -0500)
commitd5fe5fb232a4e57c66779b8b6acdcb458e9b8b9c
tree0fd0c6f82e3fbbc1284c2139b22af31b5c2480fe
parented546dd06195c27d92ae46f2bb1a74261bcb49e6
Make json{b}_populate_recordset() use the right tuple descriptor.

json{b}_populate_recordset() used the tuple descriptor created from the
query-level AS clause without worrying about whether it matched the actual
input record type.  If it didn't, that would usually result in a crash,
though disclosure of server memory contents seems possible as well, for a
skilled attacker capable of issuing crafted SQL commands.  Instead, use
the query-supplied descriptor only when there is no input tuple to look at,
and otherwise get a tuple descriptor based on the input tuple's own type
marking.  The core code will detect any type mismatch in the latter case.

Michael Paquier and Tom Lane, per a report from David Rowley.
Back-patch to 9.3 where this functionality was introduced.

Security: CVE-2017-15098
src/backend/utils/adt/jsonfuncs.c
src/test/regress/expected/json.out
src/test/regress/expected/jsonb.out
src/test/regress/sql/json.sql
src/test/regress/sql/jsonb.sql