aboutsummaryrefslogtreecommitdiff
path: root/contrib/jsonb_plperl/jsonb_plperl.c
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2019-08-04 14:05:35 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2019-08-04 14:05:35 -0400
commitdf521ab79547b82471126e54e9dc7fead4a5a4fb (patch)
tree4bb232ee28872dcec9d3f1a2728046b6c0d65092 /contrib/jsonb_plperl/jsonb_plperl.c
parent4844c6303296d4fa2c9cc800685e4f404dfa5396 (diff)
downloadpostgresql-df521ab79547b82471126e54e9dc7fead4a5a4fb.tar.gz
postgresql-df521ab79547b82471126e54e9dc7fead4a5a4fb.zip
Fix handling of "undef" in contrib/jsonb_plperl.
Perl has multiple internal representations of "undef", and just testing for SvTYPE(x) == SVt_NULL doesn't recognize all of them, leading to "cannot transform this Perl type to jsonb" errors. Use the approved test SvOK() instead. Report and patch by Ivan Panchenko. Back-patch to v11 where this module was added. Discussion: https://postgr.es/m/1564783533.324795401@f193.i.mail.ru
Diffstat (limited to 'contrib/jsonb_plperl/jsonb_plperl.c')
-rw-r--r--contrib/jsonb_plperl/jsonb_plperl.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/contrib/jsonb_plperl/jsonb_plperl.c b/contrib/jsonb_plperl/jsonb_plperl.c
index b26723a9589..04b04df953f 100644
--- a/contrib/jsonb_plperl/jsonb_plperl.c
+++ b/contrib/jsonb_plperl/jsonb_plperl.c
@@ -189,12 +189,12 @@ SV_to_JsonbValue(SV *in, JsonbParseState **jsonb_state, bool is_elem)
case SVt_PVHV:
return HV_to_JsonbValue((HV *) in, jsonb_state);
- case SVt_NULL:
- out.type = jbvNull;
- break;
-
default:
- if (SvUOK(in))
+ if (!SvOK(in))
+ {
+ out.type = jbvNull;
+ }
+ else if (SvUOK(in))
{
/*
* If UV is >=64 bits, we have no better way to make this