I was not pushy, wasn't I?
but honestly, better to have it there cause that would simplify
deployment,
just compile ( not patch and compile ).
Thank you.
-----Original Message-----
From: Tom Lane [mailto:tgl@sss.pgh.pa.us]
Sent: Thursday, July 17, 2003 2:00 PM
To: Maksim Likharev
Cc: joe666@gnovus.com; Andrew Sullivan; Postgresql General Mail List
Subject: Re: [GENERAL] ODBC query problem
"Maksim Likharev" <mlikharev@aurigin.com> writes:
> I would suggest, if I may, following:
Okay, okay, already ;-)
I've patched it per attached for 7.3.4.
regards, tom lane
*** src/backend/utils/adt/selfuncs.c.orig Wed Apr 16 00:38:05 2003
--- src/backend/utils/adt/selfuncs.c Thu Jul 17 16:49:07 2003
***************
*** 2313,2321 ****
convert_string_datum(Datum value, Oid typid)
{
char *val;
- char *xfrmstr;
- size_t xfrmsize;
- size_t xfrmlen;
switch (typid)
{
--- 2313,2318 ----
***************
*** 2355,2371 ****
if (!lc_collate_is_c())
{
! /* Guess that transformed string is not much bigger than
original */
! xfrmsize = strlen(val) + 32; /* arbitrary pad value
here... */
! xfrmstr = (char *) palloc(xfrmsize);
! xfrmlen = strxfrm(xfrmstr, val, xfrmsize);
! if (xfrmlen >= xfrmsize)
! {
! /* Oops, didn't make it */
! pfree(xfrmstr);
! xfrmstr = (char *) palloc(xfrmlen + 1);
! xfrmlen = strxfrm(xfrmstr, val, xfrmlen + 1);
! }
pfree(val);
val = xfrmstr;
}
--- 2352,2372 ----
if (!lc_collate_is_c())
{
! char *xfrmstr;
! size_t xfrmlen;
! size_t xfrmlen2;
!
! /*
! * Note: originally we guessed at a suitable output
buffer size,
! * and only needed to call strxfrm twice if our guess
was too small.
! * However, it seems that some versions of Solaris have
buggy
! * strxfrm that can write past the specified buffer
length in that
! * scenario. So, do it the dumb way for portability.
! */
! xfrmlen = strxfrm(NULL, val, 0);
! xfrmstr = (char *) palloc(xfrmlen + 1);
! xfrmlen2 = strxfrm(xfrmstr, val, xfrmlen + 1);
! Assert(xfrmlen2 == xfrmlen);
pfree(val);
val = xfrmstr;
}