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 по дате отправления:

Предыдущее
От: Josh Berkus
Дата:
Сообщение: Re: We need volunteers for Comdex!
Следующее
От: "Nigel J. Andrews"
Дата:
Сообщение: Re: what's the scope of psql parameter values?