Re: [GENERAL] Segmentation fault while COPY in 7.3 - Mailing list pgsql-hackers

From Tom Lane
Subject Re: [GENERAL] Segmentation fault while COPY in 7.3
Date
Msg-id 25344.1038764286@sss.pgh.pa.us
Whole thread Raw
In response to Re: [GENERAL] Segmentation fault while COPY in 7.3  ("Nicolai Tufar" <ntufar@apb.com.tr>)
List pgsql-hackers
"Nicolai Tufar" <ntufar@apb.com.tr> writes:
> From: "Tom Lane" <tgl@sss.pgh.pa.us>
>> Ohhh ...
>>
>> Nicolai, are you running with a client encoding different from server
>> encoding?

> Got it!

Okay, the problem is a double free of memory in COPY OUT.  I've applied
the following patch for 7.3.1.  (A better fix would be for COPY OUT to
run in a local memory context that it could reset every so often, like
once per row, and then we could remove these risky retail pfree's entirely.
I plan to do that instead in development sources.)

            regards, tom lane

*** src/backend/commands/copy.c.orig    Fri Oct 18 20:25:36 2002
--- src/backend/commands/copy.c    Sun Dec  1 12:28:24 2002
***************
*** 1470,1478 ****
      char       *string;
      char        c;
      char        delimc = delim[0];
-
      bool        same_encoding;
!     char       *string_start;
      int            mblen;
      int            i;

--- 1470,1477 ----
      char       *string;
      char        c;
      char        delimc = delim[0];
      bool        same_encoding;
!     char       *string_start = NULL;
      int            mblen;
      int            i;

***************
*** 1481,1492 ****
      {
          string = (char *) pg_server_to_client((unsigned char *) server_string,
                                                strlen(server_string));
!         string_start = string;
      }
      else
      {
          string = server_string;
-         string_start = NULL;
      }

      for (; (c = *string) != '\0'; string += mblen)
--- 1480,1491 ----
      {
          string = (char *) pg_server_to_client((unsigned char *) server_string,
                                                strlen(server_string));
!         if (string != server_string)
!             string_start = string;
      }
      else
      {
          string = server_string;
      }

      for (; (c = *string) != '\0'; string += mblen)

pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: 7.4 Wishlist
Next
From: Stephan Szabo
Date:
Subject: Re: 7.4 Wishlist