diff options
| author | Tom Lane <tgl@sss.pgh.pa.us> | 2023-04-27 11:55:06 -0400 |
|---|---|---|
| committer | Tom Lane <tgl@sss.pgh.pa.us> | 2023-04-27 11:55:06 -0400 |
| commit | df38157d94662a64e2f83aa8a0110fd1ee7c4776 (patch) | |
| tree | aa23440f895e60f24a264e3c5bc96fcac2c86201 /contrib/hstore_plpython/expected | |
| parent | 376dc820531bafcbf105fff74c5b14c23d9950af (diff) | |
In hstore_plpython, avoid crashing when return value isn't a mapping.
Python 3 changed the behavior of PyMapping_Check(), breaking the
test in plpython_to_hstore() that verifies whether a function result
to be transformed is acceptable. A backwards-compatible fix is to
first verify that the object doesn't pass PySequence_Check().
Perhaps accidentally, our other uses of PyMapping_Check() already
follow uses of PySequence_Check(), so that no other bugs were
created by this change.
Per bug #17908 from Alexander Lakhin. Back-patch to all supported
branches.
Dmitry Dolgov and Tom Lane
Discussion: https://postgr.es/m/17908-3f19a125d56a11d6@postgresql.org
Diffstat (limited to 'contrib/hstore_plpython/expected')
| -rw-r--r-- | contrib/hstore_plpython/expected/hstore_plpython.out | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/contrib/hstore_plpython/expected/hstore_plpython.out b/contrib/hstore_plpython/expected/hstore_plpython.out index bf238701fec..5fb56a2f65d 100644 --- a/contrib/hstore_plpython/expected/hstore_plpython.out +++ b/contrib/hstore_plpython/expected/hstore_plpython.out @@ -32,6 +32,17 @@ INFO: [('aa', 'bb'), ('cc', None)] 2 (1 row) +-- test that a non-mapping result is correctly rejected +CREATE FUNCTION test1bad() RETURNS hstore +LANGUAGE plpython3u +TRANSFORM FOR TYPE hstore +AS $$ +return "foo" +$$; +SELECT test1bad(); +ERROR: not a Python mapping +CONTEXT: while creating return value +PL/Python function "test1bad" -- test hstore[] -> python CREATE FUNCTION test1arr(val hstore[]) RETURNS int LANGUAGE plpython3u |
