macos: do not quit prefpane unexpectedly 46/12446/2
authorMarcio Barbosa <mbarbosa@sinenomine.net>
Fri, 11 Nov 2016 21:21:58 +0000 (13:21 -0800)
committerBenjamin Kaduk <kaduk@mit.edu>
Sun, 13 Nov 2016 11:17:32 +0000 (06:17 -0500)
If the user opens the OpenAFS preference pane and choose the Mounts
tab, the preference pane crashes.

To fix the problem, do not assume that we can cast a NSdictionary
object to NSMutableDictionary.

Change-Id: I3b5f6cb324a6b53c6b53606f71185f61450ee793
Reviewed-on: https://gerrit.openafs.org/12446
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
Tested-by: Benjamin Kaduk <kaduk@mit.edu>

src/platform/DARWIN/AFSPreference/AFSBackgrounder/AFSBackgrounderDelegate.m
src/platform/DARWIN/AFSPreference/AFSCommanderPref.m

index d2d81fa..b636de9 100644 (file)
 
        //get link configuration
        NSData *prefData = (NSData*)CFPreferencesCopyValue((CFStringRef)PREFERENCE_LINK_CONFIGURATION, (CFStringRef)kAfsCommanderID, kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
-       linkConfiguration = (NSMutableDictionary*)[NSPropertyListSerialization propertyListFromData:prefData
-                                                                                                                                                          mutabilityOption:NSPropertyListMutableContainers
-                                                                                                                                                                                format:nil
-                                                                                                                                                          errorDescription:nil];
+       NSDictionary *linkDict = (NSMutableDictionary*)[NSPropertyListSerialization propertyListFromData:prefData
+                                                                                   mutabilityOption:NSPropertyListMutableContainers
+                                                                                   format:nil
+                                                                                   errorDescription:nil];
+       linkConfiguration = [linkDict mutableCopy];
        
        //get link enabled status
        NSNumber *linkEnabledStatus =  (NSNumber*)CFPreferencesCopyValue((CFStringRef)PREFERENCE_USE_LINK, (CFStringRef)kAfsCommanderID, kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
index dd6d9bf..1a06b02 100644 (file)
 
     //link configuration
     NSData *prefData = (NSData*)CFPreferencesCopyValue((CFStringRef)PREFERENCE_LINK_CONFIGURATION,  (CFStringRef)kAfsCommanderID,  kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
-    linkConfiguration = (NSMutableDictionary*)[NSPropertyListSerialization propertyListFromData:prefData
-                                                                          mutabilityOption:NSPropertyListMutableContainers
-                                                                          format:nil
-                                                                          errorDescription:nil];
+    NSDictionary *linkDict = (NSMutableDictionary*)[NSPropertyListSerialization propertyListFromData:prefData
+                                                                               mutabilityOption:NSPropertyListMutableContainers
+                                                                               format:nil
+                                                                               errorDescription:nil];
+    linkConfiguration = [linkDict mutableCopy];
 }
 
 // -------------------------------------------------------------------------------