diff options
author | Damiano Galassi <[email protected]> | 2016-12-27 11:53:11 +0100 |
---|---|---|
committer | Damiano Galassi <[email protected]> | 2016-12-27 11:53:11 +0100 |
commit | 2cc18941fa64a74d0f86f00215f112d940266585 (patch) | |
tree | 45b4d9b423ebcc5be8605e413af3fc021359e3f9 | |
parent | ec1553108f3881a380904bcc8be7c19a626cb69a (diff) |
MacGui: enable NSSecureCoding for the queue file.
-rw-r--r-- | macosx/HBAudio.m | 4 | ||||
-rw-r--r-- | macosx/HBAudioDefaults.m | 2 | ||||
-rw-r--r-- | macosx/HBChapter.h | 2 | ||||
-rw-r--r-- | macosx/HBCodingUtilities.h | 5 | ||||
-rw-r--r-- | macosx/HBCodingUtilities.m | 13 | ||||
-rw-r--r-- | macosx/HBDistributedArray.h | 2 | ||||
-rw-r--r-- | macosx/HBDistributedArray.m | 14 | ||||
-rw-r--r-- | macosx/HBJob.m | 6 | ||||
-rw-r--r-- | macosx/HBPictureHUDController.h | 8 | ||||
-rw-r--r-- | macosx/HBQueueController.m | 2 | ||||
-rw-r--r-- | macosx/HBSubtitles.m | 6 | ||||
-rw-r--r-- | macosx/HBTitle.m | 2 | ||||
-rw-r--r-- | macosx/HBVideo.m | 2 |
13 files changed, 50 insertions, 18 deletions
diff --git a/macosx/HBAudio.m b/macosx/HBAudio.m index 1faae116e..be7df2465 100644 --- a/macosx/HBAudio.m +++ b/macosx/HBAudio.m @@ -285,8 +285,8 @@ NSString *HBAudioChangedNotification = @"HBAudioChangedNotification"; self = [super init]; decodeInt(_container); - decodeObject(_sourceTracks, NSMutableArray); - decodeObject(_tracks, NSMutableArray); + decodeCollectionOfObjects(_sourceTracks, NSArray, NSDictionary); + decodeCollectionOfObjects(_tracks, NSMutableArray, HBAudioTrack); for (HBAudioTrack *track in _tracks) { diff --git a/macosx/HBAudioDefaults.m b/macosx/HBAudioDefaults.m index 127e2a47a..204d13967 100644 --- a/macosx/HBAudioDefaults.m +++ b/macosx/HBAudioDefaults.m @@ -471,7 +471,7 @@ decodeInteger(_trackSelectionBehavior); decodeObject(_trackSelectionLanguages, NSMutableArray); - decodeObject(_tracksArray, NSMutableArray); + decodeCollectionOfObjects(_tracksArray, NSMutableArray, HBAudioTrackPreset); decodeBool(_allowAACPassthru); decodeBool(_allowAC3Passthru); diff --git a/macosx/HBChapter.h b/macosx/HBChapter.h index bef15d599..070a0f53d 100644 --- a/macosx/HBChapter.h +++ b/macosx/HBChapter.h @@ -12,7 +12,7 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)initWithTitle:(NSString *)title index:(NSUInteger)idx duration:(uint64_t)duration NS_DESIGNATED_INITIALIZER; -@property (nonatomic, readwrite) NSString *title; +@property (nonatomic, readwrite, copy) NSString *title; @property (nonatomic, readonly) NSString *duration; @property (nonatomic, readonly) NSUInteger index; diff --git a/macosx/HBCodingUtilities.h b/macosx/HBCodingUtilities.h index c8eb3763e..de50bfaf7 100644 --- a/macosx/HBCodingUtilities.h +++ b/macosx/HBCodingUtilities.h @@ -19,6 +19,8 @@ #define decodeDouble(x) x = [decoder decodeDoubleForKey:OBJC_STRINGIFY(x)] #define decodeObject(x, cl) x = [HBCodingUtilities decodeObjectOfClass:[cl class] forKey:OBJC_STRINGIFY(x) decoder:decoder]; +#define decodeCollectionOfObjects(x, cl, objectcl) x = [HBCodingUtilities decodeObjectOfClasses:[NSSet setWithObjects:[cl class], [objectcl class], nil] forKey:OBJC_STRINGIFY(x) decoder:decoder]; + #define decodeObjectOrFail(x, class) x = [HBCodingUtilities decodeObjectOfClass:class forKey:OBJC_STRINGIFY(x) decoder:decoder]; if (x == nil) {NSLog(@"Failed to decode: %@", OBJC_STRINGIFY(x)); goto fail;} NS_ASSUME_NONNULL_BEGIN @@ -41,6 +43,9 @@ NS_ASSUME_NONNULL_BEGIN */ + (nullable id)decodeObjectOfClass:(Class)aClass forKey:(NSString *)key decoder:(NSCoder *)decoder; + ++ (nullable id)decodeObjectOfClasses:(NSSet *)classes forKey:(NSString *)key decoder:(NSCoder *)decoder; + @end NS_ASSUME_NONNULL_END diff --git a/macosx/HBCodingUtilities.m b/macosx/HBCodingUtilities.m index a87ad3f7a..80e245a7b 100644 --- a/macosx/HBCodingUtilities.m +++ b/macosx/HBCodingUtilities.m @@ -42,4 +42,17 @@ static BOOL useSecureCoding; } } ++ (id)decodeObjectOfClasses:(NSSet *)classes forKey:(NSString *)key decoder:(NSCoder *)decoder +{ + if (useSecureCoding) + { + return [decoder decodeObjectOfClasses:classes forKey:key]; + } + else + { + id obj = [decoder decodeObjectForKey:key]; + return obj; + } +} + @end diff --git a/macosx/HBDistributedArray.h b/macosx/HBDistributedArray.h index dee8bfc12..b410da472 100644 --- a/macosx/HBDistributedArray.h +++ b/macosx/HBDistributedArray.h @@ -35,7 +35,7 @@ typedef NS_ENUM(NSUInteger, HBDistributedArrayContent) { */ @interface HBDistributedArray<ObjectType> : NSMutableArray -- (instancetype)initWithURL:(NSURL *)fileURL; +- (instancetype)initWithURL:(NSURL *)fileURL class:(Class)objectClass; /** * Begins a transaction on the array diff --git a/macosx/HBDistributedArray.m b/macosx/HBDistributedArray.m index d5cb38976..432e5cd29 100644 --- a/macosx/HBDistributedArray.m +++ b/macosx/HBDistributedArray.m @@ -59,6 +59,8 @@ NSString *HBDistributedArraWrittenToDisk = @"HBDistributedArraWrittenToDisk"; @property (nonatomic, readonly) NSURL *fileURL; @property (nonatomic, readwrite) NSTimeInterval modifiedTime; +@property (nonatomic, readonly) NSSet *objectClasses; + @property (nonatomic, readonly) sem_t *mutex; @property (nonatomic, readwrite) uint32_t mutexCount; @@ -66,13 +68,14 @@ NSString *HBDistributedArraWrittenToDisk = @"HBDistributedArraWrittenToDisk"; @implementation HBDistributedArray -- (instancetype)initWithURL:(NSURL *)fileURL +- (instancetype)initWithURL:(NSURL *)fileURL class:(Class)objectClass { self = [super init]; if (self) { _fileURL = [fileURL copy]; _array = [[NSMutableArray alloc] init]; + _objectClasses = [NSSet setWithObjects:[NSMutableArray class], objectClass, nil]; NSArray *runningInstances = [NSRunningApplication runningApplicationsWithBundleIdentifier:[[NSBundle mainBundle] bundleIdentifier]]; const char *name = [NSString stringWithFormat:@"/%@.hblock", _fileURL.lastPathComponent].UTF8String; @@ -196,7 +199,14 @@ NSString *HBDistributedArraWrittenToDisk = @"HBDistributedArraWrittenToDisk"; NSMutableArray *jobsArray = nil; @try { - jobsArray = [NSKeyedUnarchiver unarchiveObjectWithFile:self.fileURL.path]; + NSData *queue = [NSData dataWithContentsOfURL:self.fileURL]; + NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:queue]; + if ([unarchiver respondsToSelector:@selector(requiresSecureCoding)]) + { + unarchiver.requiresSecureCoding = YES; + } + jobsArray = [unarchiver decodeObjectOfClasses:self.objectClasses forKey:NSKeyedArchiveRootObjectKey]; + [unarchiver finishDecoding]; } @catch (NSException *exception) { diff --git a/macosx/HBJob.m b/macosx/HBJob.m index e3d608a9a..2adee6bbb 100644 --- a/macosx/HBJob.m +++ b/macosx/HBJob.m @@ -242,7 +242,7 @@ NSString *HBChaptersChangedNotification = @"HBChaptersChangedNotification"; - (void)encodeWithCoder:(NSCoder *)coder { - [coder encodeInt:1 forKey:@"HBJobVersion"]; + [coder encodeInt:2 forKey:@"HBJobVersion"]; encodeInt(_state); encodeObject(_name); @@ -274,7 +274,7 @@ NSString *HBChaptersChangedNotification = @"HBChaptersChangedNotification"; { int version = [decoder decodeIntForKey:@"HBJobVersion"]; - if (version == 1 && (self = [super init])) + if (version == 2 && (self = [super init])) { decodeInt(_state); decodeObject(_name, NSString); @@ -304,7 +304,7 @@ NSString *HBChaptersChangedNotification = @"HBChaptersChangedNotification"; _video.job = self; decodeBool(_chaptersEnabled); - decodeObject(_chapterTitles, NSArray); + decodeCollectionOfObjects(_chapterTitles, NSArray, HBChapter); return self; } diff --git a/macosx/HBPictureHUDController.h b/macosx/HBPictureHUDController.h index 1a11d2063..b127347e8 100644 --- a/macosx/HBPictureHUDController.h +++ b/macosx/HBPictureHUDController.h @@ -8,6 +8,8 @@ #import <Cocoa/Cocoa.h> #import "HBHUD.h" +NS_ASSUME_NONNULL_BEGIN + @protocol HBPictureHUDControllerDelegate <NSObject> - (void)displayPreviewAtIndex:(NSUInteger)idx; @@ -21,10 +23,12 @@ @property (nonatomic, nullable, assign) id<HBPictureHUDControllerDelegate> delegate; -@property (nonatomic, nonnull) NSString *info; -@property (nonatomic, nonnull) NSString *scale; +@property (nonatomic, copy) NSString *info; +@property (nonatomic, copy) NSString *scale; @property (nonatomic) NSUInteger pictureCount; @property (nonatomic) NSUInteger selectedIndex; @end + +NS_ASSUME_NONNULL_END diff --git a/macosx/HBQueueController.m b/macosx/HBQueueController.m index 318233714..8dfef4e26 100644 --- a/macosx/HBQueueController.m +++ b/macosx/HBQueueController.m @@ -72,7 +72,7 @@ _core = [[HBCore alloc] initWithLogLevel:loggingLevel name:@"QueueCore"]; // Load the queue from disk. - _jobs = [[HBDistributedArray alloc] initWithURL:queueURL]; + _jobs = [[HBDistributedArray alloc] initWithURL:queueURL class:[HBJob class]]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadQueue) name:HBDistributedArrayChanged object:_jobs]; } diff --git a/macosx/HBSubtitles.m b/macosx/HBSubtitles.m index 549d06647..f1a31174b 100644 --- a/macosx/HBSubtitles.m +++ b/macosx/HBSubtitles.m @@ -83,7 +83,7 @@ extern NSString *keySubTrackSrtFileURL; NSDictionary *none = @{ keySubTrackName: NSLocalizedString(@"None", nil)}; [sourceTracks insertObject:none atIndex:0]; - NSDictionary *foreign = @{ keySubTrackName: foreignAudioSearchTrackName, + NSDictionary *foreign = @{ keySubTrackName: [foreignAudioSearchTrackName copy], keySubTrackType: @(foreignAudioType) }; [sourceTracks insertObject:foreign atIndex:1]; @@ -446,8 +446,8 @@ extern NSString *keySubTrackSrtFileURL; self = [super init]; decodeInt(_container); - decodeObject(_sourceTracks, NSMutableArray); - decodeObject(_tracks, NSMutableArray); + decodeCollectionOfObjects(_sourceTracks, NSArray, NSDictionary); + decodeCollectionOfObjects(_tracks, NSMutableArray, HBSubtitlesTrack); for (HBSubtitlesTrack *track in _tracks) { diff --git a/macosx/HBTitle.m b/macosx/HBTitle.m index 66d76efd3..cfe511157 100644 --- a/macosx/HBTitle.m +++ b/macosx/HBTitle.m @@ -29,7 +29,7 @@ extern NSString *keySubTrackType; @property (nonatomic, readonly) hb_title_t *hb_title; @property (nonatomic, readonly) hb_handle_t *hb_handle; -@property (nonatomic, readwrite, strong) NSString *name; +@property (nonatomic, readwrite, copy) NSString *name; @property (nonatomic, readwrite) NSArray *audioTracks; @property (nonatomic, readwrite) NSArray *subtitlesTracks; diff --git a/macosx/HBVideo.m b/macosx/HBVideo.m index 6dfc16325..26a45c239 100644 --- a/macosx/HBVideo.m +++ b/macosx/HBVideo.m @@ -552,7 +552,7 @@ NSString * const HBVideoChangedNotification = @"HBVideoChangedNotification"; [string appendString:@"fastdecode"]; } - return string; + return [string copy]; } - (void)applyPreset:(HBPreset *)preset jobSettings:(NSDictionary *)settings |