mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-25 01:31:08 +00:00
Merge pull request #133 from gnustep/NSSecureCoding_branch
Start implementing some secure coding methods.
This commit is contained in:
commit
de0282fdac
2 changed files with 49 additions and 22 deletions
|
@ -87,6 +87,18 @@ extern "C" {
|
||||||
*/
|
*/
|
||||||
+ (NSData*) archivedDataWithRootObject: (id)anObject;
|
+ (NSData*) archivedDataWithRootObject: (id)anObject;
|
||||||
|
|
||||||
|
|
||||||
|
#if OS_API_VERSION(MAC_OS_X_VERSION_10_13,GS_API_LATEST)
|
||||||
|
/**
|
||||||
|
* Encodes anObject and returns the resulting data object. Allows
|
||||||
|
* secure coding if specified. Returns an error if an object
|
||||||
|
* violates secure coding rules.
|
||||||
|
*/
|
||||||
|
+ (NSData *) archivedDataWithRootObject: (id)anObject
|
||||||
|
requiringSecureCoding: (BOOL)requiresSecureCoding
|
||||||
|
error: (NSError **)error;
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Encodes anObject and writes the resulting data ti aPath.
|
* Encodes anObject and writes the resulting data ti aPath.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -430,34 +430,49 @@ static NSDictionary *makeReference(unsigned ref)
|
||||||
|
|
||||||
@implementation NSKeyedArchiver
|
@implementation NSKeyedArchiver
|
||||||
|
|
||||||
|
+ (NSData *) archivedDataWithRootObject: (id)anObject
|
||||||
|
requiringSecureCoding: (BOOL)requiresSecureCoding
|
||||||
|
error: (NSError **)error
|
||||||
|
{
|
||||||
|
NSData *d = nil;
|
||||||
|
|
||||||
|
if (requiresSecureCoding == NO)
|
||||||
|
{
|
||||||
|
NSMutableData *m = nil;
|
||||||
|
NSKeyedArchiver *a = nil;
|
||||||
|
|
||||||
|
error = NULL;
|
||||||
|
NS_DURING
|
||||||
|
{
|
||||||
|
m = [[NSMutableData alloc] initWithCapacity: 10240];
|
||||||
|
a = [[NSKeyedArchiver alloc] initForWritingWithMutableData: m];
|
||||||
|
[a encodeObject: anObject forKey: @"root"];
|
||||||
|
[a finishEncoding];
|
||||||
|
d = [m copy];
|
||||||
|
DESTROY(m);
|
||||||
|
DESTROY(a);
|
||||||
|
}
|
||||||
|
NS_HANDLER
|
||||||
|
{
|
||||||
|
DESTROY(m);
|
||||||
|
DESTROY(a);
|
||||||
|
[localException raise];
|
||||||
|
}
|
||||||
|
NS_ENDHANDLER;
|
||||||
|
}
|
||||||
|
|
||||||
|
return AUTORELEASE(d);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* When I tried this on MacOS 10.3 it encoded the object with the key 'root',
|
* When I tried this on MacOS 10.3 it encoded the object with the key 'root',
|
||||||
* so this implementation does the same.
|
* so this implementation does the same.
|
||||||
*/
|
*/
|
||||||
+ (NSData*) archivedDataWithRootObject: (id)anObject
|
+ (NSData*) archivedDataWithRootObject: (id)anObject
|
||||||
{
|
{
|
||||||
NSMutableData *m = nil;
|
return [self archivedDataWithRootObject: anObject
|
||||||
NSKeyedArchiver *a = nil;
|
requiringSecureCoding: NO
|
||||||
NSData *d = nil;
|
error: NULL];
|
||||||
|
|
||||||
NS_DURING
|
|
||||||
{
|
|
||||||
m = [[NSMutableData alloc] initWithCapacity: 10240];
|
|
||||||
a = [[NSKeyedArchiver alloc] initForWritingWithMutableData: m];
|
|
||||||
[a encodeObject: anObject forKey: @"root"];
|
|
||||||
[a finishEncoding];
|
|
||||||
d = [m copy];
|
|
||||||
DESTROY(m);
|
|
||||||
DESTROY(a);
|
|
||||||
}
|
|
||||||
NS_HANDLER
|
|
||||||
{
|
|
||||||
DESTROY(m);
|
|
||||||
DESTROY(a);
|
|
||||||
[localException raise];
|
|
||||||
}
|
|
||||||
NS_ENDHANDLER
|
|
||||||
return AUTORELEASE(d);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (BOOL) archiveRootObject: (id)anObject toFile: (NSString*)aPath
|
+ (BOOL) archiveRootObject: (id)anObject toFile: (NSString*)aPath
|
||||||
|
|
Loading…
Reference in a new issue