Re: ODBC query problem
От | Tom Lane |
---|---|
Тема | Re: ODBC query problem |
Дата | |
Msg-id | 14696.1058475618@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | Re: ODBC query problem ("Maksim Likharev" <mlikharev@aurigin.com>) |
Список | pgsql-general |
"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; }
В списке pgsql-general по дате отправления: