Make json{b}_populate_recordset() use the right tuple descriptor.
Tom Lane <tgl@sss.pgh.pa.us>
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
Files
| Path | Change | +/− |
|---|---|---|
| src/backend/utils/adt/jsonfuncs.c | modified | +37 −21 |
| src/test/regress/expected/json.out | modified | +13 −0 |
| src/test/regress/sql/json.sql | modified | +5 −0 |