Mailing Lists: Apple Mailing Lists

Image of Mac OS face in stamp
 
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Nasty bug with CFBundles



Hi,

Just found this nasty buglet with CFBundles that I thought I would share in case it bites anyone else. If you create a CFBundleRef twice using the same file but with different paths, then release one of them, it is no longer possible to access the first bundle by ID. This code snippet describes the problem:

// Load the same bundle twice with two different paths, when the second instance is released the
// first also goes missing
CFURLRef urlA = ::CFURLCreateWithFileSystemPath( NULL, CFSTR("/ System/Library/Frameworks/Carbon.framework"), kCFURLPOSIXPathStyle, true );
CFURLRef urlB = ::CFURLCreateWithFileSystemPath( NULL, CFSTR("/ System/../System/Library/Frameworks/Carbon.framework"), kCFURLPOSIXPathStyle, true );

// Load A
CFBundleRef bundleA = ::CFBundleCreate( NULL, urlA );
ASSERT( bundleA );


// Get the identifier for A
CFStringRef idA = ::CFBundleGetIdentifier( bundleA );

// Load B - this is the same bundle bit with a different path - note that bundleA and bundleB
// should be the same but they are not
CFBundleRef bundleB = ::CFBundleCreate( NULL, urlB );
ASSERT( bundleB );

// Release B
::CFRelease( bundleB );

// Now try and get our bundle by ID - this will return NULL
CFBundleRef bundleAByID = ::CFBundleGetBundleWithIdentifier( idA );
ASSERT( bundleAByID );


I suspect this is because CFURL does not have a proper "compare" function that will work out whether two paths really point to the same thing. Just another reason why paths are bad (m'kay)!

Reported:  radr://4318699

Cheers,

Steve.

Stephen Baxter
Software Development Manager
Improvision
email@hidden
+44-2476-692229


_______________________________________________ Do not post admin requests to the list. They will be ignored. Carbon-dev mailing list (email@hidden) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/carbon-dev/email@hidden

This email sent to email@hidden


Visit the Apple Store online or at retail locations.
1-800-MY-APPLE

Contact Apple | Terms of Use | Privacy Policy

Copyright © 2007 Apple Inc. All rights reserved.