1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-05 23:56:58 +03:00

Properly handle empty arrays returned from plperl functions.

Bug reported by David Wheeler, fix by Alex Hunsaker.
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	modified:   src/pl/plperl/plperl.c
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	autom4te.cache/
#	configure.in~
#	doc/src/sgml/ref/grant.sgml~
#	src/backend/port/win32_latch.c~
#	src/bin/psql/command.c~
#	src/include/pg_config.h.win32~
#	src/pl/plpython/plpython.c~
#	src/tools/msvc/pgbison.bat~
#	src/tools/msvc/pgbison.pl.bak
#	src/tools/msvc/pgflex.bat~
#	src/tools/msvc/pgflex.pl.bak
#	src/tools/pgindent/README~
#	src/tools/pgindent/pgindent.pl
#	src/tools/pgindent/pgindent.pl~
#	xxxxx
#	yyyyyy
This commit is contained in:
Andrew Dunstan 2011-08-17 12:03:26 -04:00
parent dfee7d16ad
commit 22a55b3af6

View File

@ -1077,14 +1077,15 @@ _array_to_datum(AV *av, int *ndims, int *dims, int cur_depth,
int i = 0;
int len = av_len(av) + 1;
if (len == 0)
astate = accumArrayResult(astate, (Datum) 0, true, atypid, NULL);
for (i = 0; i < len; i++)
{
/* fetch the array element */
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;
/* multi-dimensional array? */
if (sav)
{
AV *nav = (AV *) SvRV(sav);
@ -1148,6 +1149,9 @@ plperl_array_to_datum(SV *src, Oid typid)
astate = _array_to_datum((AV *) SvRV(src), &ndims, dims, 1, astate, typid,
atypid);
if (!astate)
return PointerGetDatum(construct_empty_array(atypid));
for (i = 0; i < ndims; i++)
lbs[i] = 1;