Blame SOURCES/openssl-fips-0.9.8e-cve-2009-0590.patch

c4366c
diff -up openssl-fips-0.9.8e/crypto/asn1/asn1_err.c.bad-string openssl-fips-0.9.8e/crypto/asn1/asn1_err.c
c4366c
--- openssl-fips-0.9.8e/crypto/asn1/asn1_err.c.bad-string	2006-11-21 21:14:36.000000000 +0100
c4366c
+++ openssl-fips-0.9.8e/crypto/asn1/asn1_err.c	2009-04-15 16:31:18.000000000 +0200
c4366c
@@ -188,6 +188,7 @@ static ERR_STRING_DATA ASN1_str_reasons[
c4366c
 {ERR_REASON(ASN1_R_BAD_OBJECT_HEADER)    ,"bad object header"},
c4366c
 {ERR_REASON(ASN1_R_BAD_PASSWORD_READ)    ,"bad password read"},
c4366c
 {ERR_REASON(ASN1_R_BAD_TAG)              ,"bad tag"},
c4366c
+{ERR_REASON(ASN1_R_BMPSTRING_IS_WRONG_LENGTH),"bmpstring is wrong length"},
c4366c
 {ERR_REASON(ASN1_R_BN_LIB)               ,"bn lib"},
c4366c
 {ERR_REASON(ASN1_R_BOOLEAN_IS_WRONG_LENGTH),"boolean is wrong length"},
c4366c
 {ERR_REASON(ASN1_R_BUFFER_TOO_SMALL)     ,"buffer too small"},
c4366c
@@ -267,6 +268,7 @@ static ERR_STRING_DATA ASN1_str_reasons[
c4366c
 {ERR_REASON(ASN1_R_UNABLE_TO_DECODE_RSA_KEY),"unable to decode rsa key"},
c4366c
 {ERR_REASON(ASN1_R_UNABLE_TO_DECODE_RSA_PRIVATE_KEY),"unable to decode rsa private key"},
c4366c
 {ERR_REASON(ASN1_R_UNEXPECTED_EOC)       ,"unexpected eoc"},
c4366c
+{ERR_REASON(ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH),"universalstring is wrong length"},
c4366c
 {ERR_REASON(ASN1_R_UNKNOWN_FORMAT)       ,"unknown format"},
c4366c
 {ERR_REASON(ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM),"unknown message digest algorithm"},
c4366c
 {ERR_REASON(ASN1_R_UNKNOWN_OBJECT_TYPE)  ,"unknown object type"},
c4366c
diff -up openssl-fips-0.9.8e/crypto/asn1/asn1.h.bad-string openssl-fips-0.9.8e/crypto/asn1/asn1.h
c4366c
--- openssl-fips-0.9.8e/crypto/asn1/asn1.h.bad-string	2009-04-15 13:48:50.000000000 +0200
c4366c
+++ openssl-fips-0.9.8e/crypto/asn1/asn1.h	2009-04-15 16:31:18.000000000 +0200
c4366c
@@ -1134,6 +1134,7 @@ void ERR_load_ASN1_strings(void);
c4366c
 #define ASN1_R_BAD_OBJECT_HEADER			 102
c4366c
 #define ASN1_R_BAD_PASSWORD_READ			 103
c4366c
 #define ASN1_R_BAD_TAG					 104
c4366c
+#define ASN1_R_BMPSTRING_IS_WRONG_LENGTH		 210
c4366c
 #define ASN1_R_BN_LIB					 105
c4366c
 #define ASN1_R_BOOLEAN_IS_WRONG_LENGTH			 106
c4366c
 #define ASN1_R_BUFFER_TOO_SMALL				 107
c4366c
@@ -1213,6 +1214,7 @@ void ERR_load_ASN1_strings(void);
c4366c
 #define ASN1_R_UNABLE_TO_DECODE_RSA_KEY			 157
c4366c
 #define ASN1_R_UNABLE_TO_DECODE_RSA_PRIVATE_KEY		 158
c4366c
 #define ASN1_R_UNEXPECTED_EOC				 159
c4366c
+#define ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH		 211
c4366c
 #define ASN1_R_UNKNOWN_FORMAT				 160
c4366c
 #define ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM		 161
c4366c
 #define ASN1_R_UNKNOWN_OBJECT_TYPE			 162
c4366c
diff -up openssl-fips-0.9.8e/crypto/asn1/tasn_dec.c.bad-string openssl-fips-0.9.8e/crypto/asn1/tasn_dec.c
c4366c
--- openssl-fips-0.9.8e/crypto/asn1/tasn_dec.c.bad-string	2007-01-23 18:54:22.000000000 +0100
c4366c
+++ openssl-fips-0.9.8e/crypto/asn1/tasn_dec.c	2009-04-15 16:31:18.000000000 +0200
c4366c
@@ -1012,6 +1012,18 @@ int asn1_ex_c2i(ASN1_VALUE **pval, const
c4366c
 		case V_ASN1_SET:
c4366c
 		case V_ASN1_SEQUENCE:
c4366c
 		default:
c4366c
+		if (utype == V_ASN1_BMPSTRING && (len & 1))
c4366c
+			{
c4366c
+			ASN1err(ASN1_F_ASN1_EX_C2I,
c4366c
+					ASN1_R_BMPSTRING_IS_WRONG_LENGTH);
c4366c
+			goto err;
c4366c
+			}
c4366c
+		if (utype == V_ASN1_UNIVERSALSTRING && (len & 3))
c4366c
+			{
c4366c
+			ASN1err(ASN1_F_ASN1_EX_C2I,
c4366c
+					ASN1_R_UNIVERSALSTRING_IS_WRONG_LENGTH);
c4366c
+			goto err;
c4366c
+			}
c4366c
 		/* All based on ASN1_STRING and handled the same */
c4366c
 		if (!*pval)
c4366c
 			{