Am Sun, 17 Feb 2008 14:28:18 -0500
schrieb Tom Lane <[EMAIL PROTECTED]>:

> Stefan Niantschur <[EMAIL PROTECTED]> writes:
> > Am Sun, 17 Feb 2008 09:17:08 -0500
> > schrieb Tom Lane <[EMAIL PROTECTED]>:
> >> Hardly surprising when you're printing the string into a fixed-size
> >> 8K buffer. The buffer overflow is smashing the stack, in particular
> >> the function's return address.
> 
> > Yes, I know, but the backend does not allow for a bigger buffer.
> > Trying to use a 80K (char[81920])buffer did not work and returns:
> 
> So you've got some other bug in code you didn't show us.  It's highly
> unlikely that you wouldn't be able to allocate an 80K buffer.
> (Whether that's big enough for your data even yet is a separate
> question.)
> 
> What I was wondering was why you even bothered with the char[] buffer,
> when it looked like the actually useful return value was being
> accumulated in an expansible StringInfo buffer.
> 
>                       regards, tom lane
> 

Hi all,

now after some days of intensive brainwork I could solve the problem
with a slight change in the code. It turned out that palloc() did not
reliably work for my purpose.

So before calling SPI_finish() I am doing the following:

text       *out = (text *) SPI_palloc(strlen(cres) + VARHDRSZ);
memcpy(VARDATA(out), cres, strlen(cres));
VARATT_SIZEP(out) = strlen(cres) + VARHDRSZ;
SPI_finish();

which allocates the needed memory in the upper execution context. This
allows for passing the really long string back to the select statement
without crashing the database.

If there are any better proceedings, please let me know.

Best Regards,
Stefan

---------------------------(end of broadcast)---------------------------
TIP 1: if posting/reading through Usenet, please send an appropriate
       subscribe-nomail command to [EMAIL PROTECTED] so that your
       message can get through to the mailing list cleanly

Reply via email to