Op 9/18/23 om 05:15 schreef Amit Langote:
On Sun, Sep 17, 2023 at 3:34 PM Erik Rijkers <e...@xs4all.nl> wrote:
Op 9/14/23 om 10:14 schreef Amit Langote:



Hi Amit,

Just now I built a v14-patched server and I found this crash:

select json_query(jsonb '
{
    "arr": [
      {"arr": [2,3]}
    , {"arr": [4,5]}
    ]
}'
    , '$.arr[*].arr ? (@ <= 3)' returning anyarray  WITH WRAPPER) --crash
;
server closed the connection unexpectedly
         This probably means the server terminated abnormally
         before or while processing the request.
connection to server was lost

Thanks for the report.

Attached updated version fixes the crash, but you get an error as is
to be expected:

select json_query(jsonb '
{
    "arr": [
      {"arr": [2,3]}
    , {"arr": [4,5]}
    ]
}'
    , '$.arr[*].arr ? (@ <= 3)' returning anyarray  WITH WRAPPER);
ERROR:  cannot accept a value of type anyarray

unlike when using int[]:

select json_query(jsonb '
{
    "arr": [
      {"arr": [2,3]}
    , {"arr": [4,5]}
    ]
}'
    , '$.arr[*].arr ? (@ <= 3)' returning int[]  WITH WRAPPER);
  json_query
------------
  {2,3}
(1 row)


Thanks, Amit. Alas, there are more: for 'anyarray' I thought I'd substitute 'interval', 'int4range', 'int8range', and sure enough they all give similar crashes. Patched with v15:

psql -qX -e << SQL
select json_query(jsonb'{"a":[{"a":[2,3]},{"a":[4,5]}]}',
  '$.a[*].a?(@<=3)'returning int[] with wrapper --ok
);

select json_query(jsonb'{"a": [{"a": [2,3]}, {"a": [4,5]}]}',
  '$.a[*].a?(@<=3)'returning interval  with wrapper --crash
--'$.a[*].a?(@<=3)'returning int4range with wrapper --crash
--'$.a[*].a?(@<=3)'returning int8range with wrapper --crash
--'$.a[*].a?(@<=3)'returning numeric[] with wrapper --{2,3} =ok
--'$.a[*].a?(@<=3)'returning anyarray  with wrapper --fixed
--'$.a[*].a?(@<=3)'returning anyarray           --null =ok
--'$.a[*].a?(@<=3)'returning int                --null =ok
--'$.a[*].a?(@<=3)'returning int   with wrapper --error =ok
--'$.a[*].a?(@<=3)'returning int[] with wrapper -- {2,3} =ok
);
SQL
=> server closed the connection unexpectedly, etc

Because those first three tries gave a crash (*all three*), I'm a bit worried there may be many more.

I am sorry to be bothering you with these somewhat idiotic SQL statements but I suppose somehow it needs to be made more solid.

Thanks!

Erik


Reply via email to