Andrew Dunstan wrote: > > The attached patch moves a plperl sanity check into the correct > position. Performing the check in the existing position allows the call > to go through to perl first, possibly resulting in a SEGV.
OK, patch applied. Your version didn't apply cleanly so I just moved the block manually. -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073
Index: src/pl/plperl/plperl.c =================================================================== RCS file: /cvsroot/pgsql/src/pl/plperl/plperl.c,v retrieving revision 1.86 diff -c -c -r1.86 plperl.c *** src/pl/plperl/plperl.c 12 Jul 2005 20:35:42 -0000 1.86 --- src/pl/plperl/plperl.c 12 Aug 2005 20:45:56 -0000 *************** *** 921,926 **** --- 921,936 ---- plperl_current_tuple_store = 0; plperl_current_tuple_desc = 0; + if (!rsi || !IsA(rsi, ReturnSetInfo) || + (rsi->allowedModes & SFRM_Materialize) == 0 || + rsi->expectedDesc == NULL) + { + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("set-valued function called in context that " + "cannot accept a set"))); + } + perlret = plperl_call_perl_func(prodesc, fcinfo); /************************************************************ *************** *** 936,951 **** if (prodesc->fn_retisset) { - if (!rsi || !IsA(rsi, ReturnSetInfo) || - (rsi->allowedModes & SFRM_Materialize) == 0 || - rsi->expectedDesc == NULL) - { - ereport(ERROR, - (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("set-valued function called in context that " - "cannot accept a set"))); - } - /* If the Perl function returned an arrayref, we pretend that it * called return_next() for each element of the array, to handle * old SRFs that didn't know about return_next(). Any other sort --- 946,951 ----
---------------------------(end of broadcast)--------------------------- TIP 3: Have you checked our extensive FAQ? http://www.postgresql.org/docs/faq