@@ -253,6 +253,24 @@ static int pkcs7_get_signature( unsigned char **p, unsigned char *end,
253
253
return ( 0 );
254
254
}
255
255
256
+ static void pkcs7_free_signer_info ( mbedtls_pkcs7_signer_info * signer )
257
+ {
258
+ mbedtls_x509_name * name_cur ;
259
+ mbedtls_x509_name * name_prv ;
260
+
261
+ if ( signer == NULL )
262
+ return ;
263
+
264
+ name_cur = signer -> issuer .next ;
265
+ while ( name_cur != NULL )
266
+ {
267
+ name_prv = name_cur ;
268
+ name_cur = name_cur -> next ;
269
+ mbedtls_free ( name_prv );
270
+ }
271
+ signer -> issuer .next = NULL ;
272
+ }
273
+
256
274
/**
257
275
* SignerInfo ::= SEQUENCE {
258
276
* version Version;
@@ -329,33 +347,16 @@ static int pkcs7_get_signer_info( unsigned char **p, unsigned char *end,
329
347
ret = MBEDTLS_ERR_PKCS7_INVALID_SIGNER_INFO ;
330
348
331
349
out :
332
- if ( asn1_ret != 0 )
350
+ if ( asn1_ret != 0 || ret != 0 )
351
+ {
352
+ pkcs7_free_signer_info ( signer );
333
353
ret = MBEDTLS_ERROR_ADD ( MBEDTLS_ERR_PKCS7_INVALID_SIGNER_INFO ,
334
354
asn1_ret );
335
- else if ( ret != 0 )
336
- ret = MBEDTLS_ERR_PKCS7_INVALID_SIGNER_INFO ;
355
+ }
337
356
338
357
return ( ret );
339
358
}
340
359
341
- static void pkcs7_free_signer_info ( mbedtls_pkcs7_signer_info * signer )
342
- {
343
- mbedtls_x509_name * name_cur ;
344
- mbedtls_x509_name * name_prv ;
345
-
346
- if ( signer == NULL )
347
- return ;
348
-
349
- name_cur = signer -> issuer .next ;
350
- while ( name_cur != NULL )
351
- {
352
- name_prv = name_cur ;
353
- name_cur = name_cur -> next ;
354
- mbedtls_free ( name_prv );
355
- }
356
- signer -> issuer .next = NULL ;
357
- }
358
-
359
360
/**
360
361
* SignerInfos ::= SET of SignerInfo
361
362
* Return number of signers added to the signed data,
@@ -387,7 +388,7 @@ static int pkcs7_get_signers_info_set( unsigned char **p, unsigned char *end,
387
388
388
389
ret = pkcs7_get_signer_info ( p , end_set , signers_set );
389
390
if ( ret != 0 )
390
- goto cleanup ;
391
+ return ( ret ) ;
391
392
count ++ ;
392
393
393
394
mbedtls_pkcs7_signer_info * prev = signers_set ;
0 commit comments