pgsql: Only allow returning string types or bytea from json_serialize

Started by Andrew Dunstanalmost 4 years ago5 messagescomitters
Jump to latest
#1Andrew Dunstan
andrew@dunslane.net

Only allow returning string types or bytea from json_serialize

These are documented to be the allowed types for the RETURNING clause,
but the restriction was not being enforced, which caused a segfault if
another type was specified. Add some testing for this.

Per report from a.kozhemyakin

Backpatch to release 15.

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/3c633f32b9c712cc0b4c8d946f0eeae04a3ff51a

Modified Files
--------------
src/backend/parser/parse_expr.c | 17 +++++++++++++++++
src/test/regress/expected/sqljson.out | 10 ++++++++++
src/test/regress/sql/sqljson.sql | 5 +++++
3 files changed, 32 insertions(+)

#2Kyotaro Horiguchi
horikyota.ntt@gmail.com
In reply to: Andrew Dunstan (#1)
Re: pgsql: Only allow returning string types or bytea from json_serialize

At Thu, 07 Jul 2022 21:46:12 +0000, Andrew Dunstan <andrew@dunslane.net> wrote in

Only allow returning string types or bytea from json_serialize

I noticed that this introcues the following error message.

+  errmsg("cannot use RETURNING type %s in JSON_SERIALIZE"
+								format_type_be(returning->typid)),

However, the same file has the following error message.

errmsg("cannot use RETURNING type %s in %s",
format_type_be(returning->typid), fname),

So, couldn't we share the format string to reduce translatable
messages?

And, the other messages are

cannot use RETURNING type %s in JSON_SCALAR(), and
cannot use RETURNING type %s in JSON()

So, I think this should not be

cannot use RETURNING type %s in JSON_SERIALIZE

, but should be

cannot use RETURNING type %s in JSON_SERIALIZE()

regards.

--
Kyotaro Horiguchi
NTT Open Source Software Center

Attachments:

0001-Fix-an-error-message.patchtext/x-patch; charset=us-asciiDownload+4-4
#3Michael Paquier
michael@paquier.xyz
In reply to: Kyotaro Horiguchi (#2)
Re: pgsql: Only allow returning string types or bytea from json_serialize

On Fri, Jul 08, 2022 at 03:41:35PM +0900, Kyotaro Horiguchi wrote:

I noticed that this introcues the following error message.

+  errmsg("cannot use RETURNING type %s in JSON_SERIALIZE"
+								format_type_be(returning->typid)),

However, the same file has the following error message.

errmsg("cannot use RETURNING type %s in %s",
format_type_be(returning->typid), fname),

So, couldn't we share the format string to reduce translatable
messages?

Yeah, I think that you are right, so let's fix this. If Andrew does
not show up, I'll take care of it.
--
Michael

#4Michael Paquier
michael@paquier.xyz
In reply to: Michael Paquier (#3)
Re: pgsql: Only allow returning string types or bytea from json_serialize

On Fri, Jul 08, 2022 at 07:20:14PM +0900, Michael Paquier wrote:

Yeah, I think that you are right, so let's fix this. If Andrew does
not show up, I'll take care of it.

Okay, this one is done, then. Thanks for the patch, Horiguchi-san.
--
Michael

#5Kyotaro Horiguchi
horikyota.ntt@gmail.com
In reply to: Michael Paquier (#4)
Re: pgsql: Only allow returning string types or bytea from json_serialize

At Mon, 11 Jul 2022 12:49:11 +0900, Michael Paquier <michael@paquier.xyz> wrote in

On Fri, Jul 08, 2022 at 07:20:14PM +0900, Michael Paquier wrote:

Yeah, I think that you are right, so let's fix this. If Andrew does
not show up, I'll take care of it.

Okay, this one is done, then. Thanks for the patch, Horiguchi-san.

Thanks!
(I came to notice that I sent the mail only to -commiters..)

regards.

--
Kyotaro Horiguchi
NTT Open Source Software Center