Properly handle empty arrays returned from plperl functions.
Bug reported by David Wheeler, fix by Alex Hunsaker.
This commit is contained in:
parent
1bf80041e3
commit
68c903a66c
@ -1078,14 +1078,15 @@ _array_to_datum(AV *av, int *ndims, int *dims, int cur_depth,
|
|||||||
int i = 0;
|
int i = 0;
|
||||||
int len = av_len(av) + 1;
|
int len = av_len(av) + 1;
|
||||||
|
|
||||||
if (len == 0)
|
|
||||||
astate = accumArrayResult(astate, (Datum) 0, true, atypid, NULL);
|
|
||||||
|
|
||||||
for (i = 0; i < len; i++)
|
for (i = 0; i < len; i++)
|
||||||
{
|
{
|
||||||
|
/* fetch the array element */
|
||||||
SV **svp = av_fetch(av, i, FALSE);
|
SV **svp = av_fetch(av, i, FALSE);
|
||||||
|
|
||||||
|
/* see if this element is an array, if so get that */
|
||||||
SV *sav = svp ? get_perl_array_ref(*svp) : NULL;
|
SV *sav = svp ? get_perl_array_ref(*svp) : NULL;
|
||||||
|
|
||||||
|
/* multi-dimensional array? */
|
||||||
if (sav)
|
if (sav)
|
||||||
{
|
{
|
||||||
AV *nav = (AV *) SvRV(sav);
|
AV *nav = (AV *) SvRV(sav);
|
||||||
@ -1149,6 +1150,9 @@ plperl_array_to_datum(SV *src, Oid typid)
|
|||||||
astate = _array_to_datum((AV *) SvRV(src), &ndims, dims, 1, astate, typid,
|
astate = _array_to_datum((AV *) SvRV(src), &ndims, dims, 1, astate, typid,
|
||||||
atypid);
|
atypid);
|
||||||
|
|
||||||
|
if (!astate)
|
||||||
|
return PointerGetDatum(construct_empty_array(atypid));
|
||||||
|
|
||||||
for (i = 0; i < ndims; i++)
|
for (i = 0; i < ndims; i++)
|
||||||
lbs[i] = 1;
|
lbs[i] = 1;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user