Merge pull request #133 from gnustep/NSSecureCoding_branch

Start implementing some secure coding methods.
This commit is contained in:
Gregory Casamento 2020-05-12 15:16:40 -04:00 committed by GitHub
commit de0282fdac
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 49 additions and 22 deletions

View file

@ -87,6 +87,18 @@ extern "C" {
*/
+ (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.
*/

View file

@ -430,16 +430,18 @@ static NSDictionary *makeReference(unsigned ref)
@implementation NSKeyedArchiver
/*
* When I tried this on MacOS 10.3 it encoded the object with the key 'root',
* so this implementation does the same.
*/
+ (NSData *) archivedDataWithRootObject: (id)anObject
requiringSecureCoding: (BOOL)requiresSecureCoding
error: (NSError **)error
{
NSData *d = nil;
if (requiresSecureCoding == NO)
{
NSMutableData *m = nil;
NSKeyedArchiver *a = nil;
NSData *d = nil;
error = NULL;
NS_DURING
{
m = [[NSMutableData alloc] initWithCapacity: 10240];
@ -456,10 +458,23 @@ static NSDictionary *makeReference(unsigned ref)
DESTROY(a);
[localException raise];
}
NS_ENDHANDLER
NS_ENDHANDLER;
}
return AUTORELEASE(d);
}
/*
* When I tried this on MacOS 10.3 it encoded the object with the key 'root',
* so this implementation does the same.
*/
+ (NSData*) archivedDataWithRootObject: (id)anObject
{
return [self archivedDataWithRootObject: anObject
requiringSecureCoding: NO
error: NULL];
}
+ (BOOL) archiveRootObject: (id)anObject toFile: (NSString*)aPath
{
NSAutoreleasePool *pool = [NSAutoreleasePool new];