bug-gnustep
[Top][All Lists]
Advanced

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

[bugs #8498] [MinGW] NSUnarchiver crashes


From: Gregory John Casamento
Subject: [bugs #8498] [MinGW] NSUnarchiver crashes
Date: Sat, 10 Apr 2004 23:39:50 -0400
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030821

This mail is an automated notification from the bugs tracker
 of the project: GNUstep.

/**************************************************************************/
[bugs #8498] Latest Modifications:

Changes by: 
                Gregory John Casamento <address@hidden>
'Date: 
                Sun 04/11/04 at 03:39 (US/Eastern)

------------------ Additional Follow-up Comments ----------------------------
I have attached a modified version of the original example which causes a 
segfaul in NSUnarchiver.m when unarchiving an NSNumber object.

I believe that this is because the NSNumber object is released and, since 
NSNumber objects are cached, this causes an issue when the object is 
subsequently reused.

I am reverting the previous fix until this problem is corrected. GJC






/**************************************************************************/
[bugs #8498] Full Item Snapshot:

URL: <http://savannah.gnu.org/bugs/?func=detailitem&item_id=8498>
Project: GNUstep
Submitted by: Willem Rein Oudshoorn
On: Thu 04/08/04 at 09:45

Category:  Base/Foundation
Severity:  3 - Ordinary
Item Group:  Bug
Resolution:  None
Assigned to:  wim
Status:  Analyzed


Summary:  [MinGW] NSUnarchiver crashes

Original Submission:  It seems that if you call release on an decoded object
that is shared with other objects lead to a crash.

In particular:

Obj1 ---> string
Obj2 ----/

and if in initWithCoder of Obj1 (and Obj2) we have:

[coder decodeValuesOfObjCType: "@", &string];
[string release];

the decoding crashes.  
The funny thing is that this seems to be a windows
specific problem.  It works fine on Linux.

The attached program will demonstrate the problem:

./TestCoder Encode test.enc

this will create test.enc  

./TestCoder Decode test.enc

which decodes the created test.enc.  This crashes
on MinGW but not on Linux and the generated
files test.enc are identical, so it is probably
in de unarchiving code.




Follow-up Comments
------------------


-------------------------------------------------------
Date: Sun 04/11/04 at 03:39         By: gcasa
I have attached a modified version of the original example which causes a 
segfaul in NSUnarchiver.m when unarchiving an NSNumber object.

I believe that this is because the NSNumber object is released and, since 
NSNumber objects are cached, this causes an issue when the object is 
subsequently reused.

I am reverting the previous fix until this problem is corrected. GJC

-------------------------------------------------------
Date: Fri 04/09/04 at 10:29         By: wim
The attached patch should fix this.  
It will retain the objects in the objMap and release them
when clearing the map.   But note that we really need 
to be carefull when retaining the objects, otherwise code like

- initWithCoder:..
{
   [self dealloc];
   return something_else;
}

will crash the unarchiver.  
This rules out the replacement of objMap with an 
NSArray.  

If nobody objects I will commit this shortly.

Wim Oudshoorn.
 


-------------------------------------------------------
Date: Thu 04/08/04 at 11:58         By: wim
Actually, it is a generic bug, Linux is just lucky!
The bug is as follows:
NSUnarchiver has an ivar, "objMap" which is a map
from "ref" to "Objects".  However the the "Objects"
are NOT retained.  This means that if they are deallocated
the reference in this map becomes invalid.   Solution is
to retain the objects in this map.







File Attachments
-------------------

-------------------------------------------------------
Date: Sun 04/11/04 at 03:39  Name: testCoderWithNumber.tar.bz2  Size: 1KB   By: 
gcasa
Illustrates the problem with encoding numbers.
http://savannah.gnu.org/bugs/download.php?item_id=8498&amp;item_file_id=1184

-------------------------------------------------------
Date: Fri 04/09/04 at 10:29  Name: NSUnarchiver.patch  Size: 1KB   By: wim
Patch to retain temporary the objects so initwithcoder can release them
http://savannah.gnu.org/bugs/download.php?item_id=8498&amp;item_file_id=1177

-------------------------------------------------------
Date: Thu 04/08/04 at 09:45  Name: testCoder.tar.bz2  Size: 1KB   By: wim
Demonstrating crash.
http://savannah.gnu.org/bugs/download.php?item_id=8498&amp;item_file_id=1173






For detailed info, follow this link:
<http://savannah.gnu.org/bugs/?func=detailitem&item_id=8498>

_______________________________________________
  Message sent via/by Savannah
  http://savannah.gnu.org/







reply via email to

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