@@ -21,18 +21,18 @@ #import "OFASN1BitString.h" #import "OFASN1Boolean.h" #import "OFASN1Enumerated.h" #import "OFASN1IA5String.h" #import "OFASN1Integer.h" -#import "OFASN1Null.h" #import "OFASN1NumericString.h" #import "OFASN1ObjectIdentifier.h" #import "OFASN1OctetString.h" #import "OFASN1PrintableString.h" #import "OFASN1UTF8String.h" #import "OFASN1Value.h" #import "OFArray.h" +#import "OFNull.h" #import "OFSet.h" #import "OFInvalidArgumentException.h" #import "OFInvalidFormatException.h" #import "OFOutOfRangeException.h" @@ -172,12 +172,18 @@ break; case OF_ASN1_TAG_NUMBER_OCTET_STRING: valueClass = [OFASN1OctetString class]; break; case OF_ASN1_TAG_NUMBER_NULL: - valueClass = [OFASN1Null class]; - break; + if (tag & ASN1_TAG_CONSTRUCTED_MASK) + @throw [OFInvalidFormatException exception]; + + if ([contents count] != 0) + @throw [OFInvalidFormatException exception]; + + *object = [OFNull null]; + return bytesConsumed; case OF_ASN1_TAG_NUMBER_OBJECT_IDENTIFIER: valueClass = [OFASN1ObjectIdentifier class]; break; case OF_ASN1_TAG_NUMBER_ENUMERATED: valueClass = [OFASN1Enumerated class]; @@ -209,14 +215,15 @@ default: valueClass = [OFASN1Value class]; break; } - *object = [valueClass valueWithTagClass: tag >> 6 - tagNumber: tag & 0x1F - constructed: tag & ASN1_TAG_CONSTRUCTED_MASK - DEREncodedContents: contents]; + *object = [[[valueClass alloc] + initWithTagClass: tag >> 6 + tagNumber: tag & 0x1F + constructed: tag & ASN1_TAG_CONSTRUCTED_MASK + DEREncodedContents: contents] autorelease]; return bytesConsumed; } @implementation OFData (ASN1DERValue) - (id)ASN1DERValue