summaryrefslogtreecommitdiff
path: root/contrib/hstore_plpython/sql
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2023-04-27 11:55:06 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2023-04-27 11:55:06 -0400
commitc74f88c406dced7e23527d036b41e1a3213d27ea (patch)
tree6901af74fe916453299f8b0b4fcbf59e06093c87 /contrib/hstore_plpython/sql
parentaeb6f4b3b0d079155f9129ff6b043e9c8a926e72 (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/sql')
-rw-r--r--contrib/hstore_plpython/sql/hstore_plpython.sql11
1 files changed, 11 insertions, 0 deletions
diff --git a/contrib/hstore_plpython/sql/hstore_plpython.sql b/contrib/hstore_plpython/sql/hstore_plpython.sql
index b6d98b7dd53..1aa4416512a 100644
--- a/contrib/hstore_plpython/sql/hstore_plpython.sql
+++ b/contrib/hstore_plpython/sql/hstore_plpython.sql
@@ -27,6 +27,17 @@ $$;
SELECT test1n('aa=>bb, cc=>NULL'::hstore);
+-- test that a non-mapping result is correctly rejected
+CREATE FUNCTION test1bad() RETURNS hstore
+LANGUAGE plpythonu
+TRANSFORM FOR TYPE hstore
+AS $$
+return "foo"
+$$;
+
+SELECT test1bad();
+
+
-- test hstore[] -> python
CREATE FUNCTION test1arr(val hstore[]) RETURNS int
LANGUAGE plpythonu