discuss-gnustep
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Problem with GSFromUnicode in Unicode.m


From: Fred Kiefer
Subject: Re: Problem with GSFromUnicode in Unicode.m
Date: Thu, 03 Mar 2011 11:01:00 +0100
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; de; rv:1.9.1.16) Gecko/20101125 SUSE/3.0.11 Thunderbird/3.0.11

I had a short look at the last change Richard made and there he
corrected the dest check, but forgot to change the || into an && in the
second place that was changed. This argument is only based on symmetry
as I don't understand what is going on here.

Fred

Am 03.03.2011 10:27, schrieb Sebastian Reitenbach:
> Hi Richard,
> On Thursday, March 03, 2011 09:21:22 am you wrote:
>> On 2 Mar 2011, at 14:33, Sebastian Reitenbach wrote:
>>> Hi,
>>>
>>> When i want to install sieve scripts from ogo into the cyrus imapd sieve
>>> daemon, ogo uses the tool sky_install_sieve. This tool crashes,
>>> converting a unicode string (actually the filter list), due to a double
>>> free?
>>>
>>> As far as I can see, the problem might be in GSFromUnicode in Unicode.m,
>>> see the backtrace below.
>>> Attached patch fixes the problem for me, but I am not sure whether this
>>> is actually right. I also don't have a mac to see whether/how it is
>>> working there. The only thing I can tell is that with libFoundation, it
>>> was working, and I guess it was also tested and working on the mac,
>>> years ago.
>>>
>>> This happens for me with gnustep-base-1.20.2. also the patch is against
>>> it. I additionally check for zone != 0, since I don't think it makes
>>> sense to free a zone which is already 0, which is was here for me all
>>> the time. The patch also still applies to -trunk, with offset of -3
>>> lines.
>>
>> Thanks ... I looked at that code and I think the problem was a logic error
>> (test of the dst pointer the wrong way round). I made small changes in svn
>> trunk ... please give it a try.
> 
> 
> I took the Unicode.m file from svn trunk, and compiled it with the gnustep-
> base-0.20.2, since I don't have a system setup where gnustep is from svn and 
> ogo is installed.
> Now it segfaults in the line before, see below:
> 
> Program received signal SIGSEGV, Segmentation fault.
> [Switching to process 17130, thread 0x85317400]
> GSFromUnicode (dst=0x0, size=0xcfbc7fb0, src=0x87205000, slen=17740, 
> enc=NSUTF8StringEncoding, zone=0x0, options=4) at Unicode.m:2490
> 2490      else if (ptr != buf && (dst != 0 || ptr != *dst))
> Current language:  auto; currently minimal
> (gdb) break
> Breakpoint 1 at 0xa832573: file Unicode.m, line 2490.
> (gdb) bt
> #0  GSFromUnicode (dst=0x0, size=0xcfbc7fb0, src=0x87205000, slen=17740, 
> enc=NSUTF8StringEncoding, zone=0x0, options=4) at Unicode.m:2490
> #1  0x0a6594f8 in -[GSMutableString lengthOfBytesUsingEncoding:] 
> (self=0x897ec668, _cmd=0x21f021c0, encoding=NSUTF8StringEncoding) at 
> GSString.m:1390
> #2  0x01f5338c in -[NGSieveClient putScript:script:] (self=0x7d35da88, 
> _cmd=0x3c0024e8, _name=0x3c002684, _script=0x897ec668) at NGSieveClient.m:426
> #3  0x1c0036bf in -[InstallSieve runWithArguments:] (self=0x81b87f48, 
> _cmd=0x3c002528, _args=0x81727608) at sky_install_sieve.m:560
> #4  0x1c0013e8 in +[InstallSieve runWithArguments:] (self=0x3c002260, 
> _cmd=0x3c002530, _args=0x81727608) at sky_install_sieve.m:588
> #5  0x1c002393 in gnustep_base_user_main (argc=13, argv=0xcfbc817c, 
> env=0xcfbc81b4) at sky_install_sieve.m:606
> #6  0x0a75b39e in main (argc=13, argv=Cannot access memory at address 0x4550
> ) at NSProcessInfo.m:933
> #7  0x1c001147 in ___start ()
> #8  0x1c0010c7 in _start ()
> #9  0x00000000 in ?? ()
> (gdb) frame 0
> #0  GSFromUnicode (dst=0x0, size=0xcfbc7fb0, src=0x87205000, slen=17740, 
> enc=NSUTF8StringEncoding, zone=0x0, options=4) at Unicode.m:2490
> 2490      else if (ptr != buf && (dst != 0 || ptr != *dst))
> (gdb) list
> 2485            {
> 2486              *dst = ptr;
> 2487            }
> 2488        }
> 2489    #if     !GS_WITH_GC
> 2490      else if (ptr != buf && (dst != 0 || ptr != *dst))
> 2491        {
> 2492          NSZoneFree(zone, ptr);
> 2493        }
> 2494    #endif
> (gdb) print ptr
> $1 = (unsigned char *) 0xcfbc3764 ""
> (gdb) print buf
> $2 = ".blah\";\n }\nelsif anyof (header :contains [\"from\"] 
> \"info@yalla.fo\", header :contains [\"from\"] \"email@humppa.blah.com\", 
> header :contains [\"from\"] \"@newsletter.blah.com\")\n {\nfileinto 
> \"INBOX.Shoppi"...
> (gdb) print dst 
> $3 = (unsigned char **) 0x0
> (gdb) print ptr
> $4 = (unsigned char *) 0xcfbc3764 ""
> (gdb) print dst
> $5 = (unsigned char **) 0x0
> (gdb) print *dst
> Cannot access memory at address 0x0
> (gdb) print dst
> $6 = (unsigned char **) 0x0
> (gdb) 
> 
> maybe the last part of the els if line should be ptr != dst instead of ptr != 
> *dst ?
> 
> cheers,
> Sebastian




reply via email to

[Prev in Thread] Current Thread [Next in Thread]