Re: Weird problems with C extension and bytea as input type

From: Merlin Moncure <mmoncure(at)gmail(dot)com>
To: Adrian Schreyer <ams214(at)cam(dot)ac(dot)uk>
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: Weird problems with C extension and bytea as input type
Date: 2011-03-22 16:07:32
Message-ID: AANLkTinJ0TW2oMOYqqzFWm=Y4fn5son2TxYN2b0wxFr9@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

On Tue, Mar 22, 2011 at 8:22 AM, Adrian Schreyer <ams214(at)cam(dot)ac(dot)uk> wrote:
> Hi,
>
> I have a weird problem with my custom functions (written in C,C++)
> that use bytea as input type (cstring works fine). The functions will
> work as expected if they are the only function that uses the bytea
> column in a query; as soon as there is a second function using the
> same column, the C function will return one of the following: an empty
> cstring, a substring of the bytea or the correct cstring. Based on
> these symptoms I assume there is something fundamental that I do wrong
> (or that is missing) with handling the bytea pointer.
>
> In one specific example, the bytea contains a binary file format that
> the function converts into a string format. I convert the bytea to a
> C++ string with string(VARDATA(b), VARSIZE(b)-VARHDRSZ).
>
> bytea *b = PG_GETARG_BYTEA_P(0);
> char *ism;
>
> ism = function(b);
>
> PG_RETURN_CSTRING(ism);

your problem is probably inside 'function' -- are you properly copying
the data out of the bytea struct?. also, are you really sure you want
to be returning cstring type, not text?

merlin

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Alex 2011-03-22 16:33:52 Install issues
Previous Message Tom Lane 2011-03-22 15:03:43 Re: share directory on windows