BUG #2291: int2vectorrecv() and oidvectorrecv() are wrong (SIGBUS)

Started by Timothy J. Kordasabout 20 years ago2 messagesbugs
Jump to latest
#1Timothy J. Kordas
tkordas@greenplum.com

The following bug has been logged online:

Bug reference: 2291
Logged by: Tim Kordas
Email address: tkordas@greenplum.com
PostgreSQL version: 8.1.3
Operating system: All
Description: int2vectorrecv() and oidvectorrecv() are wrong (SIGBUS)
Details:

During Greenplum's ongoing effort to expand support for postgres datatypes
in Bizgres-MPP; we discovered some issues with int2vectorrecv() and
oidvectorrecv().

int2vectorrecv() and oidvectorrecv() both use DirectFunctionCall3 to call
array_recv().

DirectFunctionCall3() leaves fcinfo->flinfo NULL.

array_recv() uses fcinfo->flinfo.

Calling array_recv() without a valid fcinfo->flinfo results in SIGBUS.

It would be easy to modify array_recv(), but is probably better to fix the
code in int2vectorrecv()/oidvectorrecv() by replacing the call to
DirectFunctionCall3() with direct forwarded call (similar to
int2vectorsend()):

/* leave arg[0] alone, it is correct */
fcinfo->arg[1] = ObjectIdGetDatum(INT2OID);
fcinfo->arg[2] = Int32GetDatum(-1);
result = (int2vector *)array_recv(fcinfo);

the flinfo->f_extra field used will be that passed in by array_recv()'s
caller.

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Timothy J. Kordas (#1)
Re: BUG #2291: int2vectorrecv() and oidvectorrecv() are wrong (SIGBUS)

"Tim Kordas" <tkordas@greenplum.com> writes:

During Greenplum's ongoing effort to expand support for postgres datatypes
in Bizgres-MPP; we discovered some issues with int2vectorrecv() and
oidvectorrecv().

Yeah, seems I broke them while changing these datatypes to be regular
arrays :-(. Fix committed in HEAD and 8.1 branches. Thanks for the
report.

regards, tom lane