mirror of https://github.com/openssl/openssl.git
				
				
				
			Remove combine option from ASN.1 code.
Remove the combine option. This was used for compatibility with some non standard behaviour in ancient versions of OpenSSL: specifically the X509_ATTRIBUTE and DSAPublicKey handling. Since these have now been revised it is no longer needed. Reviewed-by: Richard Levitte <levitte@openssl.org>
This commit is contained in:
		
							parent
							
								
									ea6b07b54c
								
							
						
					
					
						commit
						ee9d76371a
					
				|  | @ -973,7 +973,7 @@ void ERR_load_ASN1_strings(void); | |||
| # define ASN1_F_ASN1_INTEGER_TO_BN                        119 | ||||
| # define ASN1_F_ASN1_ITEM_D2I_FP                          206 | ||||
| # define ASN1_F_ASN1_ITEM_DUP                             191 | ||||
| # define ASN1_F_ASN1_ITEM_EX_COMBINE_NEW                  121 | ||||
| # define ASN1_F_ASN1_ITEM_EX_NEW                          121 | ||||
| # define ASN1_F_ASN1_ITEM_EX_D2I                          120 | ||||
| # define ASN1_F_ASN1_ITEM_I2D_BIO                         192 | ||||
| # define ASN1_F_ASN1_ITEM_I2D_FP                          193 | ||||
|  |  | |||
|  | @ -101,7 +101,7 @@ static ERR_STRING_DATA ASN1_str_functs[] = { | |||
|     {ERR_FUNC(ASN1_F_ASN1_INTEGER_TO_BN), "ASN1_INTEGER_to_BN"}, | ||||
|     {ERR_FUNC(ASN1_F_ASN1_ITEM_D2I_FP), "ASN1_item_d2i_fp"}, | ||||
|     {ERR_FUNC(ASN1_F_ASN1_ITEM_DUP), "ASN1_item_dup"}, | ||||
|     {ERR_FUNC(ASN1_F_ASN1_ITEM_EX_COMBINE_NEW), "ASN1_ITEM_EX_COMBINE_NEW"}, | ||||
|     {ERR_FUNC(ASN1_F_ASN1_ITEM_EX_NEW), "ASN1_ITEM_EX_NEW"}, | ||||
|     {ERR_FUNC(ASN1_F_ASN1_ITEM_EX_D2I), "ASN1_ITEM_EX_D2I"}, | ||||
|     {ERR_FUNC(ASN1_F_ASN1_ITEM_I2D_BIO), "ASN1_item_i2d_bio"}, | ||||
|     {ERR_FUNC(ASN1_F_ASN1_ITEM_I2D_FP), "ASN1_item_i2d_fp"}, | ||||
|  |  | |||
|  | @ -299,11 +299,6 @@ extern "C" { | |||
|         (flags), (tag), offsetof(stname, field),\ | ||||
|         #field, ASN1_ITEM_ref(type) } | ||||
| 
 | ||||
| /* used when the structure is combined with the parent */ | ||||
| 
 | ||||
| # define ASN1_EX_COMBINE(flags, tag, type) { \ | ||||
|         (flags)|ASN1_TFLG_COMBINE, (tag), 0, NULL, ASN1_ITEM_ref(type) } | ||||
| 
 | ||||
| /* implicit and explicit helper macros */ | ||||
| 
 | ||||
| # define ASN1_IMP_EX(stname, field, type, tag, ex) \ | ||||
|  | @ -542,15 +537,6 @@ struct ASN1_ADB_TABLE_st { | |||
| 
 | ||||
| # define ASN1_TFLG_ADB_INT       (0x1<<9) | ||||
| 
 | ||||
| /*
 | ||||
|  * This flag means a parent structure is passed instead of the field: this is | ||||
|  * useful is a SEQUENCE is being combined with a CHOICE for example. Since | ||||
|  * this means the structure and item name will differ we need to use the | ||||
|  * ASN1_CHOICE_END_name() macro for example. | ||||
|  */ | ||||
| 
 | ||||
| # define ASN1_TFLG_COMBINE       (0x1<<10) | ||||
| 
 | ||||
| /*
 | ||||
|  * This flag when present in a SEQUENCE OF, SET OF or EXPLICIT causes | ||||
|  * indefinite length constructed encoding to be used if required. | ||||
|  |  | |||
|  | @ -63,23 +63,14 @@ | |||
| #include <openssl/objects.h> | ||||
| #include "asn1_locl.h" | ||||
| 
 | ||||
| static void asn1_item_combine_free(ASN1_VALUE **pval, const ASN1_ITEM *it, | ||||
|                                    int combine); | ||||
| 
 | ||||
| /* Free up an ASN1 structure */ | ||||
| 
 | ||||
| void ASN1_item_free(ASN1_VALUE *val, const ASN1_ITEM *it) | ||||
| { | ||||
|     asn1_item_combine_free(&val, it, 0); | ||||
|     ASN1_item_ex_free(&val, it); | ||||
| } | ||||
| 
 | ||||
| void ASN1_item_ex_free(ASN1_VALUE **pval, const ASN1_ITEM *it) | ||||
| { | ||||
|     asn1_item_combine_free(pval, it, 0); | ||||
| } | ||||
| 
 | ||||
| static void asn1_item_combine_free(ASN1_VALUE **pval, const ASN1_ITEM *it, | ||||
|                                    int combine) | ||||
| { | ||||
|     const ASN1_TEMPLATE *tt = NULL, *seqtt; | ||||
|     const ASN1_EXTERN_FUNCS *ef; | ||||
|  | @ -125,10 +116,8 @@ static void asn1_item_combine_free(ASN1_VALUE **pval, const ASN1_ITEM *it, | |||
|         } | ||||
|         if (asn1_cb) | ||||
|             asn1_cb(ASN1_OP_FREE_POST, pval, it, NULL); | ||||
|         if (!combine) { | ||||
|             OPENSSL_free(*pval); | ||||
|             *pval = NULL; | ||||
|         } | ||||
|         OPENSSL_free(*pval); | ||||
|         *pval = NULL; | ||||
|         break; | ||||
| 
 | ||||
|     case ASN1_ITYPE_EXTERN: | ||||
|  | @ -163,10 +152,8 @@ static void asn1_item_combine_free(ASN1_VALUE **pval, const ASN1_ITEM *it, | |||
|         } | ||||
|         if (asn1_cb) | ||||
|             asn1_cb(ASN1_OP_FREE_POST, pval, it, NULL); | ||||
|         if (!combine) { | ||||
|             OPENSSL_free(*pval); | ||||
|             *pval = NULL; | ||||
|         } | ||||
|         OPENSSL_free(*pval); | ||||
|         *pval = NULL; | ||||
|         break; | ||||
|     } | ||||
| } | ||||
|  | @ -180,13 +167,12 @@ void asn1_template_free(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt) | |||
|         for (i = 0; i < sk_ASN1_VALUE_num(sk); i++) { | ||||
|             ASN1_VALUE *vtmp = sk_ASN1_VALUE_value(sk, i); | ||||
| 
 | ||||
|             asn1_item_combine_free(&vtmp, ASN1_ITEM_ptr(tt->item), 0); | ||||
|             ASN1_item_ex_free(&vtmp, ASN1_ITEM_ptr(tt->item)); | ||||
|         } | ||||
|         sk_ASN1_VALUE_free(sk); | ||||
|         *pval = NULL; | ||||
|     } else { | ||||
|         asn1_item_combine_free(pval, ASN1_ITEM_ptr(tt->item), | ||||
|                                tt->flags & ASN1_TFLG_COMBINE); | ||||
|         ASN1_item_ex_free(pval, ASN1_ITEM_ptr(tt->item)); | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -65,8 +65,6 @@ | |||
| #include <string.h> | ||||
| #include "asn1_locl.h" | ||||
| 
 | ||||
| static int asn1_item_ex_combine_new(ASN1_VALUE **pval, const ASN1_ITEM *it, | ||||
|                                     int combine); | ||||
| static int asn1_primitive_new(ASN1_VALUE **pval, const ASN1_ITEM *it); | ||||
| static void asn1_item_clear(ASN1_VALUE **pval, const ASN1_ITEM *it); | ||||
| static int asn1_template_new(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt); | ||||
|  | @ -84,12 +82,6 @@ ASN1_VALUE *ASN1_item_new(const ASN1_ITEM *it) | |||
| /* Allocate an ASN1 structure */ | ||||
| 
 | ||||
| int ASN1_item_ex_new(ASN1_VALUE **pval, const ASN1_ITEM *it) | ||||
| { | ||||
|     return asn1_item_ex_combine_new(pval, it, 0); | ||||
| } | ||||
| 
 | ||||
| static int asn1_item_ex_combine_new(ASN1_VALUE **pval, const ASN1_ITEM *it, | ||||
|                                     int combine) | ||||
| { | ||||
|     const ASN1_TEMPLATE *tt = NULL; | ||||
|     const ASN1_EXTERN_FUNCS *ef; | ||||
|  | @ -102,8 +94,7 @@ static int asn1_item_ex_combine_new(ASN1_VALUE **pval, const ASN1_ITEM *it, | |||
|     else | ||||
|         asn1_cb = 0; | ||||
| 
 | ||||
|     if (!combine) | ||||
|         *pval = NULL; | ||||
|     *pval = NULL; | ||||
| 
 | ||||
| #ifdef CRYPTO_MDEBUG | ||||
|     if (it->sname) | ||||
|  | @ -146,12 +137,10 @@ static int asn1_item_ex_combine_new(ASN1_VALUE **pval, const ASN1_ITEM *it, | |||
|                 return 1; | ||||
|             } | ||||
|         } | ||||
|         if (!combine) { | ||||
|             *pval = OPENSSL_malloc(it->size); | ||||
|             if (!*pval) | ||||
|                 goto memerr; | ||||
|             memset(*pval, 0, it->size); | ||||
|         } | ||||
|         *pval = OPENSSL_malloc(it->size); | ||||
|         if (!*pval) | ||||
|             goto memerr; | ||||
|         memset(*pval, 0, it->size); | ||||
|         asn1_set_choice_selector(pval, -1, it); | ||||
|         if (asn1_cb && !asn1_cb(ASN1_OP_NEW_POST, pval, it, NULL)) | ||||
|             goto auxerr; | ||||
|  | @ -171,14 +160,12 @@ static int asn1_item_ex_combine_new(ASN1_VALUE **pval, const ASN1_ITEM *it, | |||
|                 return 1; | ||||
|             } | ||||
|         } | ||||
|         if (!combine) { | ||||
|             *pval = OPENSSL_malloc(it->size); | ||||
|             if (!*pval) | ||||
|                 goto memerr; | ||||
|             memset(*pval, 0, it->size); | ||||
|             asn1_do_lock(pval, 0, it); | ||||
|             asn1_enc_init(pval, it); | ||||
|         } | ||||
|         *pval = OPENSSL_malloc(it->size); | ||||
|         if (!*pval) | ||||
|             goto memerr; | ||||
|         memset(*pval, 0, it->size); | ||||
|         asn1_do_lock(pval, 0, it); | ||||
|         asn1_enc_init(pval, it); | ||||
|         for (i = 0, tt = it->templates; i < it->tcount; tt++, i++) { | ||||
|             pseqval = asn1_get_field_ptr(pval, tt); | ||||
|             if (!asn1_template_new(pseqval, tt)) | ||||
|  | @ -195,7 +182,7 @@ static int asn1_item_ex_combine_new(ASN1_VALUE **pval, const ASN1_ITEM *it, | |||
|     return 1; | ||||
| 
 | ||||
|  memerr: | ||||
|     ASN1err(ASN1_F_ASN1_ITEM_EX_COMBINE_NEW, ERR_R_MALLOC_FAILURE); | ||||
|     ASN1err(ASN1_F_ASN1_ITEM_EX_NEW, ERR_R_MALLOC_FAILURE); | ||||
| #ifdef CRYPTO_MDEBUG | ||||
|     if (it->sname) | ||||
|         CRYPTO_pop_info(); | ||||
|  | @ -203,7 +190,7 @@ static int asn1_item_ex_combine_new(ASN1_VALUE **pval, const ASN1_ITEM *it, | |||
|     return 0; | ||||
| 
 | ||||
|  auxerr: | ||||
|     ASN1err(ASN1_F_ASN1_ITEM_EX_COMBINE_NEW, ASN1_R_AUX_ERROR); | ||||
|     ASN1err(ASN1_F_ASN1_ITEM_EX_NEW, ASN1_R_AUX_ERROR); | ||||
|     ASN1_item_ex_free(pval, it); | ||||
| #ifdef CRYPTO_MDEBUG | ||||
|     if (it->sname) | ||||
|  | @ -278,7 +265,7 @@ static int asn1_template_new(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt) | |||
|         goto done; | ||||
|     } | ||||
|     /* Otherwise pass it back to the item routine */ | ||||
|     ret = asn1_item_ex_combine_new(pval, it, tt->flags & ASN1_TFLG_COMBINE); | ||||
|     ret = ASN1_item_ex_new(pval, it); | ||||
|  done: | ||||
| #ifdef CRYPTO_MDEBUG | ||||
|     if (it->sname) | ||||
|  |  | |||
|  | @ -202,8 +202,6 @@ int asn1_enc_restore(int *len, unsigned char **out, ASN1_VALUE **pval, | |||
| ASN1_VALUE **asn1_get_field_ptr(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt) | ||||
| { | ||||
|     ASN1_VALUE **pvaltmp; | ||||
|     if (tt->flags & ASN1_TFLG_COMBINE) | ||||
|         return pval; | ||||
|     pvaltmp = offset2ptr(*pval, tt->offset); | ||||
|     /*
 | ||||
|      * NOTE for BOOLEAN types the field is just a plain int so we can't | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue