@@ -6414,8 +6414,7 @@ static int X509PrintSerial_ex(WOLFSSL_BIO* bio, byte* serial, int sz,
64146414 scratch + scratchLen , scratchSz - scratchLen ,
64156415 "%02x%s" , serial [i ], (i < sz - 1 ) ?
64166416 (delimiter ? ":" : "" ) : "\n" ))
6417- >= scratchSz - scratchLen )
6418- {
6417+ >= scratchSz - scratchLen ) {
64196418 WOLFSSL_MSG ("buffer overrun" );
64206419 return WOLFSSL_FAILURE ;
64216420 }
@@ -6428,10 +6427,8 @@ static int X509PrintSerial_ex(WOLFSSL_BIO* bio, byte* serial, int sz,
64286427
64296428 /* if serial can fit into byte then print on the same line */
64306429 else {
6431- if ((scratchLen = XSNPRINTF (
6432- scratch , MAX_WIDTH , " %d (0x%x)\n" , serial [0 ], serial [0 ]))
6433- >= MAX_WIDTH )
6434- {
6430+ if ((scratchLen = XSNPRINTF (scratch , MAX_WIDTH , " %d (0x%x)\n" ,
6431+ (char )serial [0 ], serial [0 ])) >= MAX_WIDTH ) {
64356432 WOLFSSL_MSG ("buffer overrun" );
64366433 return WOLFSSL_FAILURE ;
64376434 }
@@ -8870,85 +8867,135 @@ static int X509CRLPrintExtensions(WOLFSSL_BIO* bio, WOLFSSL_X509_CRL* crl,
88708867 int indent )
88718868{
88728869 char tmp [MAX_WIDTH ]; /* buffer for XSNPRINTF */
8870+ int ret = 0 ;
88738871
88748872 if (XSNPRINTF (tmp , MAX_WIDTH , "%*s%s\n" , indent , "" ,
88758873 "CRL extensions:" ) >= MAX_WIDTH ) {
8876- return WOLFSSL_FAILURE ;
8874+ ret = WOLFSSL_FAILURE ;
88778875 }
88788876
8879- if (wolfSSL_BIO_write (bio , tmp , (int )XSTRLEN (tmp )) <= 0 ) {
8880- return WOLFSSL_FAILURE ;
8877+ if (ret == 0 && wolfSSL_BIO_write (bio , tmp , (int )XSTRLEN (tmp )) <= 0 ) {
8878+ ret = WOLFSSL_FAILURE ;
88818879 }
88828880
8883- if (crl -> crlList -> crlNumber ) {
8884- if (XSNPRINTF (tmp , MAX_WIDTH , "%*s%s\n" , indent + 4 , "" ,
8881+ if (ret == 0 && crl -> crlList -> crlNumberSet ) {
8882+ char dec_string [49 ]; /* 20 octets can express numbers up to approx
8883+ 49 decimal digits */
8884+ int freeMp = 0 ;
8885+ #ifdef WOLFSSL_SMALL_STACK
8886+ mp_int * dec_num = (mp_int * )XMALLOC (sizeof (* dec_num ), NULL ,
8887+ DYNAMIC_TYPE_BIGINT );
8888+ if (dec_num == NULL ) {
8889+ ret = MEMORY_E ;
8890+ }
8891+ #else
8892+ mp_int dec_num [1 ];
8893+ #endif
8894+
8895+ if (ret == 0 && (mp_init (dec_num ) != MP_OKAY )) {
8896+ ret = MP_INIT_E ;
8897+ }
8898+ else if (ret == 0 ) {
8899+ freeMp = 1 ;
8900+ }
8901+
8902+ if (ret == 0 && mp_read_radix (dec_num , (char * )crl -> crlList -> crlNumber ,
8903+ MP_RADIX_HEX ) != MP_OKAY ) {
8904+ ret = WOLFSSL_FAILURE ;
8905+ }
8906+
8907+ if (ret == 0 && mp_toradix (dec_num , dec_string , MP_RADIX_DEC )
8908+ != MP_OKAY ) {
8909+ ret = WOLFSSL_FAILURE ;
8910+ }
8911+
8912+ if (ret == 0 && XSNPRINTF (tmp , MAX_WIDTH , "%*s%s\n" , indent + 4 , "" ,
88858913 "X509v3 CRL Number:" ) >= MAX_WIDTH ) {
8886- return WOLFSSL_FAILURE ;
8914+ ret = WOLFSSL_FAILURE ;
88878915 }
88888916
8889- if (wolfSSL_BIO_write (bio , tmp , (int )XSTRLEN (tmp )) <= 0 ) {
8890- return WOLFSSL_FAILURE ;
8917+ if (ret == 0 && wolfSSL_BIO_write (bio , tmp , (int )XSTRLEN (tmp )) <= 0 ) {
8918+ ret = WOLFSSL_FAILURE ;
88918919 }
88928920
8893- if (XSNPRINTF (tmp , MAX_WIDTH , "%*s%d\n" , indent + 8 , "" ,
8894- crl -> crlList -> crlNumber ) >= MAX_WIDTH )
8895- {
8896- return WOLFSSL_FAILURE ;
8921+ if (ret == 0 && XSNPRINTF (tmp , MAX_WIDTH , "%*s%s\n" , indent + 8 , "" ,
8922+ dec_string ) >= MAX_WIDTH ) {
8923+ ret = WOLFSSL_FAILURE ;
88978924 }
8898- if (wolfSSL_BIO_write (bio , tmp , (int )XSTRLEN (tmp )) <= 0 ) {
8899- return WOLFSSL_FAILURE ;
8925+
8926+ if (ret == 0 && wolfSSL_BIO_write (bio , tmp , (int )XSTRLEN (tmp )) <= 0 ) {
8927+ ret = WOLFSSL_FAILURE ;
89008928 }
8929+
89018930 XMEMSET (tmp , 0 , sizeof (tmp ));
8931+
8932+ if (freeMp ) {
8933+ mp_free (dec_num );
8934+ }
8935+
8936+ #ifdef WOLFSSL_SMALL_STACK
8937+ XFREE (dec_num , NULL , DYNAMIC_TYPE_BIGINT );
8938+ #endif
89028939 }
89038940
89048941#if !defined(NO_SKID )
8905- if (crl -> crlList -> extAuthKeyIdSet && crl -> crlList -> extAuthKeyId [0 ] != 0 ) {
8942+ if (ret == 0 && crl -> crlList -> extAuthKeyIdSet &&
8943+ crl -> crlList -> extAuthKeyId [0 ] != 0 ) {
89068944 word32 i ;
89078945 char val [5 ];
89088946 int valSz = 5 ;
89098947
89108948 if (XSNPRINTF (tmp , MAX_WIDTH , "%*s%s" , indent + 4 , "" ,
89118949 "X509v3 Authority Key Identifier:" ) >= MAX_WIDTH ) {
8912- return WOLFSSL_FAILURE ;
8950+ ret = WOLFSSL_FAILURE ;
89138951 }
89148952
8915- XSTRNCAT (tmp , "\n" , MAX_WIDTH - XSTRLEN (tmp ) - 1 );
8953+ if (ret == 0 ) {
8954+ XSTRNCAT (tmp , "\n" , MAX_WIDTH - XSTRLEN (tmp ) - 1 );
8955+ }
89168956
8917- if (wolfSSL_BIO_write (bio , tmp , (int )XSTRLEN (tmp )) <= 0 ) {
8918- return WOLFSSL_FAILURE ;
8957+ if (ret == 0 && wolfSSL_BIO_write (bio , tmp , (int )XSTRLEN (tmp )) <= 0 ) {
8958+ ret = WOLFSSL_FAILURE ;
89198959 }
89208960 XMEMSET (tmp , 0 , MAX_WIDTH );
89218961
8922- if (XSNPRINTF (tmp , MAX_WIDTH - 1 , "%*s%s" ,
8962+ if (ret == 0 && XSNPRINTF (tmp , MAX_WIDTH - 1 , "%*s%s" ,
89238963 indent + 8 , "" , "keyid" ) >= MAX_WIDTH ) {
8924- return WOLFSSL_FAILURE ;
8964+ ret = WOLFSSL_FAILURE ;
89258965 }
89268966
89278967
89288968 for (i = 0 ; i < XSTRLEN ((char * )crl -> crlList -> extAuthKeyId ); i ++ ) {
89298969 /* check if buffer is almost full */
8930- if (XSTRLEN (tmp ) >= sizeof (tmp ) - valSz ) {
8970+ if (ret == 0 && XSTRLEN (tmp ) >= sizeof (tmp ) - valSz ) {
89318971 if (wolfSSL_BIO_write (bio , tmp , (int )XSTRLEN (tmp )) <= 0 ) {
8932- return WOLFSSL_FAILURE ;
8972+ ret = WOLFSSL_FAILURE ;
89338973 }
89348974 tmp [0 ] = '\0' ;
89358975 }
8936- if (XSNPRINTF (val , (size_t )valSz , ":%02X" ,
8937- crl -> crlList -> extAuthKeyId [i ]) >= valSz )
8938- {
8976+ if (ret == 0 && XSNPRINTF (val , (size_t )valSz , ":%02X" ,
8977+ crl -> crlList -> extAuthKeyId [i ]) >= valSz ) {
89398978 WOLFSSL_MSG ("buffer overrun" );
8940- return WOLFSSL_FAILURE ;
8979+ ret = WOLFSSL_FAILURE ;
8980+ }
8981+ if (ret == 0 ) {
8982+ XSTRNCAT (tmp , val , valSz );
89418983 }
8942- XSTRNCAT (tmp , val , valSz );
89438984 }
8944- XSTRNCAT (tmp , "\n" , XSTRLEN ("\n" ) + 1 );
8945- if (wolfSSL_BIO_write (bio , tmp , (int )XSTRLEN (tmp )) <= 0 ) {
8946- return WOLFSSL_FAILURE ;
8985+ if (ret == 0 ) {
8986+ XSTRNCAT (tmp , "\n" , XSTRLEN ("\n" ) + 1 );
8987+ }
8988+ if (ret == 0 && wolfSSL_BIO_write (bio , tmp , (int )XSTRLEN (tmp )) <= 0 ) {
8989+ ret = WOLFSSL_FAILURE ;
89478990 }
89488991 }
89498992#endif
89508993
8951- return WOLFSSL_SUCCESS ;
8994+ if (ret == 0 ) {
8995+ ret = WOLFSSL_SUCCESS ;
8996+ }
8997+
8998+ return ret ;
89528999}
89539000
89549001/* iterate through a CRL's Revoked Certs and print out in human
@@ -9180,7 +9227,7 @@ void wolfSSL_X509_CRL_free(WOLFSSL_X509_CRL *crl)
91809227}
91819228#endif /* HAVE_CRL && (OPENSSL_EXTRA || WOLFSSL_WPAS_SMALL) */
91829229
9183- #ifdef OPENSSL_EXTRA
9230+ #if defined( HAVE_CRL ) && defined( OPENSSL_EXTRA )
91849231WOLFSSL_ASN1_TIME * wolfSSL_X509_CRL_get_lastUpdate (WOLFSSL_X509_CRL * crl )
91859232{
91869233 if ((crl != NULL ) && (crl -> crlList != NULL ) &&
@@ -9210,7 +9257,7 @@ int wolfSSL_X509_CRL_verify(WOLFSSL_X509_CRL* crl, WOLFSSL_EVP_PKEY* key)
92109257 return 0 ;
92119258}
92129259#endif
9213- #endif /* OPENSSL_EXTRA */
9260+ #endif /* HAVE_CRL && OPENSSL_EXTRA */
92149261
92159262#ifdef OPENSSL_EXTRA
92169263
0 commit comments