From e0f5048851ff88a53630a0c121a1cd15f6a2f1cd Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 4 Aug 2019 14:05:34 -0400 Subject: 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 --- contrib/jsonb_plperl/jsonb_plperl.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'contrib/jsonb_plperl/jsonb_plperl.c') 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 -- cgit v1.2.3