From 02e2f4043b4a284985ef3cd19676ba6041d492e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pierre-David=20Be=CC=81langer?= Date: Tue, 8 Dec 2015 22:35:06 -0500 Subject: [PATCH] java.math.BigDecimal and java.io.File typed Map should not be added to the ref list --- HessianClasses/CWHessianArchiver+Private.h | 2 +- HessianClasses/CWHessianUnarchiver+Private.m | 16 ++++++++++------ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/HessianClasses/CWHessianArchiver+Private.h b/HessianClasses/CWHessianArchiver+Private.h index 075178d..7bc2179 100644 --- a/HessianClasses/CWHessianArchiver+Private.h +++ b/HessianClasses/CWHessianArchiver+Private.h @@ -92,7 +92,7 @@ -(NSData*)readDataWithTag:(char)tag; -(NSException*)readFault; -(NSArray*)readList; --(id)readMapWithTypedObject:(id)typedObject; +-(id)readMapWithTypedObject:(id)typedObject asRef:(BOOL)asRef; -(id)readMap; -(CWDistantHessianObject*)readRemote; diff --git a/HessianClasses/CWHessianUnarchiver+Private.m b/HessianClasses/CWHessianUnarchiver+Private.m index 24b64d1..c3b1733 100644 --- a/HessianClasses/CWHessianUnarchiver+Private.m +++ b/HessianClasses/CWHessianUnarchiver+Private.m @@ -277,13 +277,15 @@ -(NSArray*)readList; return list; } --(id)readMapWithTypedObject:(id)typedObject; +-(id)readMapWithTypedObject:(id)typedObject asRef:(BOOL)asRef; { NSMutableDictionary* map = [NSMutableDictionary dictionary]; - if (typedObject) { - [self.objectReferences addObject:typedObject]; - } else { - [self.objectReferences addObject:map]; + if (asRef) { + if (typedObject) { + [self.objectReferences addObject:typedObject]; + } else { + [self.objectReferences addObject:map]; + } } while ([self peekChar] != 'z') { NSObject* key = [self readTypedObject]; @@ -309,10 +311,12 @@ -(id)readMap; { NSString* className = nil; id typedObject = nil; + BOOL asRef = YES; if ([self peekChar] == 't') { [self readChar]; className = [self readStringWithTag:'S']; if ([className length] > 0) { + asRef = !([className isEqualToString:@"java.math.BigDecimal"] || [className isEqualToString:@"java.io.File"]); Class typedClass = [self classForClassName:className]; if (typedClass) { typedObject = class_createInstance(typedClass, 0); @@ -327,7 +331,7 @@ -(id)readMap; } } } - return [self readMapWithTypedObject:typedObject]; + return [self readMapWithTypedObject:typedObject asRef:asRef]; } -(CWDistantHessianObject*)readRemote;