@@ -6423,8 +6423,7 @@ static int X509PrintSerial_ex(WOLFSSL_BIO* bio, byte* serial, int sz,
64236423 scratch + scratchLen , scratchSz - scratchLen ,
64246424 "%02x%s" , serial [i ], (i < sz - 1 ) ?
64256425 (delimiter ? ":" : "" ) : "\n" ))
6426- >= scratchSz - scratchLen )
6427- {
6426+ >= scratchSz - scratchLen ) {
64286427 WOLFSSL_MSG ("buffer overrun" );
64296428 return WOLFSSL_FAILURE ;
64306429 }
@@ -6437,10 +6436,8 @@ static int X509PrintSerial_ex(WOLFSSL_BIO* bio, byte* serial, int sz,
64376436
64386437 /* if serial can fit into byte then print on the same line */
64396438 else {
6440- if ((scratchLen = XSNPRINTF (
6441- scratch , MAX_WIDTH , " %d (0x%x)\n" , serial [0 ], serial [0 ]))
6442- >= MAX_WIDTH )
6443- {
6439+ if ((scratchLen = XSNPRINTF (scratch , MAX_WIDTH , " %d (0x%x)\n" ,
6440+ (char )serial [0 ], serial [0 ])) >= MAX_WIDTH ) {
64446441 WOLFSSL_MSG ("buffer overrun" );
64456442 return WOLFSSL_FAILURE ;
64466443 }
@@ -8879,85 +8876,135 @@ static int X509CRLPrintExtensions(WOLFSSL_BIO* bio, WOLFSSL_X509_CRL* crl,
88798876 int indent )
88808877{
88818878 char tmp [MAX_WIDTH ]; /* buffer for XSNPRINTF */
8879+ int ret = 0 ;
88828880
88838881 if (XSNPRINTF (tmp , MAX_WIDTH , "%*s%s\n" , indent , "" ,
88848882 "CRL extensions:" ) >= MAX_WIDTH ) {
8885- return WOLFSSL_FAILURE ;
8883+ ret = WOLFSSL_FAILURE ;
88868884 }
88878885
8888- if (wolfSSL_BIO_write (bio , tmp , (int )XSTRLEN (tmp )) <= 0 ) {
8889- return WOLFSSL_FAILURE ;
8886+ if (ret == 0 && wolfSSL_BIO_write (bio , tmp , (int )XSTRLEN (tmp )) <= 0 ) {
8887+ ret = WOLFSSL_FAILURE ;
88908888 }
88918889
8892- if (crl -> crlList -> crlNumber ) {
8893- if (XSNPRINTF (tmp , MAX_WIDTH , "%*s%s\n" , indent + 4 , "" ,
8890+ if (ret == 0 && crl -> crlList -> crlNumberSet ) {
8891+ char dec_string [49 ]; /* 20 octets can express numbers up to approx
8892+ 49 decimal digits */
8893+ int freeMp = 0 ;
8894+ #ifdef WOLFSSL_SMALL_STACK
8895+ mp_int * dec_num = (mp_int * )XMALLOC (sizeof (* dec_num ), NULL ,
8896+ DYNAMIC_TYPE_BIGINT );
8897+ if (dec_num == NULL ) {
8898+ ret = MEMORY_E ;
8899+ }
8900+ #else
8901+ mp_int dec_num [1 ];
8902+ #endif
8903+
8904+ if (ret == 0 && (mp_init (dec_num ) != MP_OKAY )) {
8905+ ret = MP_INIT_E ;
8906+ }
8907+ else if (ret == 0 ) {
8908+ freeMp = 1 ;
8909+ }
8910+
8911+ if (ret == 0 && mp_read_radix (dec_num , (char * )crl -> crlList -> crlNumber ,
8912+ MP_RADIX_HEX ) != MP_OKAY ) {
8913+ ret = WOLFSSL_FAILURE ;
8914+ }
8915+
8916+ if (ret == 0 && mp_toradix (dec_num , dec_string , MP_RADIX_DEC )
8917+ != MP_OKAY ) {
8918+ ret = WOLFSSL_FAILURE ;
8919+ }
8920+
8921+ if (ret == 0 && XSNPRINTF (tmp , MAX_WIDTH , "%*s%s\n" , indent + 4 , "" ,
88948922 "X509v3 CRL Number:" ) >= MAX_WIDTH ) {
8895- return WOLFSSL_FAILURE ;
8923+ ret = WOLFSSL_FAILURE ;
88968924 }
88978925
8898- if (wolfSSL_BIO_write (bio , tmp , (int )XSTRLEN (tmp )) <= 0 ) {
8899- return WOLFSSL_FAILURE ;
8926+ if (ret == 0 && wolfSSL_BIO_write (bio , tmp , (int )XSTRLEN (tmp )) <= 0 ) {
8927+ ret = WOLFSSL_FAILURE ;
89008928 }
89018929
8902- if (XSNPRINTF (tmp , MAX_WIDTH , "%*s%d\n" , indent + 8 , "" ,
8903- crl -> crlList -> crlNumber ) >= MAX_WIDTH )
8904- {
8905- return WOLFSSL_FAILURE ;
8930+ if (ret == 0 && XSNPRINTF (tmp , MAX_WIDTH , "%*s%s\n" , indent + 8 , "" ,
8931+ dec_string ) >= MAX_WIDTH ) {
8932+ ret = WOLFSSL_FAILURE ;
89068933 }
8907- if (wolfSSL_BIO_write (bio , tmp , (int )XSTRLEN (tmp )) <= 0 ) {
8908- return WOLFSSL_FAILURE ;
8934+
8935+ if (ret == 0 && wolfSSL_BIO_write (bio , tmp , (int )XSTRLEN (tmp )) <= 0 ) {
8936+ ret = WOLFSSL_FAILURE ;
89098937 }
8938+
89108939 XMEMSET (tmp , 0 , sizeof (tmp ));
8940+
8941+ if (freeMp ) {
8942+ mp_free (dec_num );
8943+ }
8944+
8945+ #ifdef WOLFSSL_SMALL_STACK
8946+ XFREE (dec_num , NULL , DYNAMIC_TYPE_BIGINT );
8947+ #endif
89118948 }
89128949
89138950#if !defined(NO_SKID )
8914- if (crl -> crlList -> extAuthKeyIdSet && crl -> crlList -> extAuthKeyId [0 ] != 0 ) {
8951+ if (ret == 0 && crl -> crlList -> extAuthKeyIdSet &&
8952+ crl -> crlList -> extAuthKeyId [0 ] != 0 ) {
89158953 word32 i ;
89168954 char val [5 ];
89178955 int valSz = 5 ;
89188956
89198957 if (XSNPRINTF (tmp , MAX_WIDTH , "%*s%s" , indent + 4 , "" ,
89208958 "X509v3 Authority Key Identifier:" ) >= MAX_WIDTH ) {
8921- return WOLFSSL_FAILURE ;
8959+ ret = WOLFSSL_FAILURE ;
89228960 }
89238961
8924- XSTRNCAT (tmp , "\n" , MAX_WIDTH - XSTRLEN (tmp ) - 1 );
8962+ if (ret == 0 ) {
8963+ XSTRNCAT (tmp , "\n" , MAX_WIDTH - XSTRLEN (tmp ) - 1 );
8964+ }
89258965
8926- if (wolfSSL_BIO_write (bio , tmp , (int )XSTRLEN (tmp )) <= 0 ) {
8927- return WOLFSSL_FAILURE ;
8966+ if (ret == 0 && wolfSSL_BIO_write (bio , tmp , (int )XSTRLEN (tmp )) <= 0 ) {
8967+ ret = WOLFSSL_FAILURE ;
89288968 }
89298969 XMEMSET (tmp , 0 , MAX_WIDTH );
89308970
8931- if (XSNPRINTF (tmp , MAX_WIDTH - 1 , "%*s%s" ,
8971+ if (ret == 0 && XSNPRINTF (tmp , MAX_WIDTH - 1 , "%*s%s" ,
89328972 indent + 8 , "" , "keyid" ) >= MAX_WIDTH ) {
8933- return WOLFSSL_FAILURE ;
8973+ ret = WOLFSSL_FAILURE ;
89348974 }
89358975
89368976
89378977 for (i = 0 ; i < XSTRLEN ((char * )crl -> crlList -> extAuthKeyId ); i ++ ) {
89388978 /* check if buffer is almost full */
8939- if (XSTRLEN (tmp ) >= sizeof (tmp ) - valSz ) {
8979+ if (ret == 0 && XSTRLEN (tmp ) >= sizeof (tmp ) - valSz ) {
89408980 if (wolfSSL_BIO_write (bio , tmp , (int )XSTRLEN (tmp )) <= 0 ) {
8941- return WOLFSSL_FAILURE ;
8981+ ret = WOLFSSL_FAILURE ;
89428982 }
89438983 tmp [0 ] = '\0' ;
89448984 }
8945- if (XSNPRINTF (val , (size_t )valSz , ":%02X" ,
8946- crl -> crlList -> extAuthKeyId [i ]) >= valSz )
8947- {
8985+ if (ret == 0 && XSNPRINTF (val , (size_t )valSz , ":%02X" ,
8986+ crl -> crlList -> extAuthKeyId [i ]) >= valSz ) {
89488987 WOLFSSL_MSG ("buffer overrun" );
8949- return WOLFSSL_FAILURE ;
8988+ ret = WOLFSSL_FAILURE ;
8989+ }
8990+ if (ret == 0 ) {
8991+ XSTRNCAT (tmp , val , valSz );
89508992 }
8951- XSTRNCAT (tmp , val , valSz );
89528993 }
8953- XSTRNCAT (tmp , "\n" , XSTRLEN ("\n" ) + 1 );
8954- if (wolfSSL_BIO_write (bio , tmp , (int )XSTRLEN (tmp )) <= 0 ) {
8955- return WOLFSSL_FAILURE ;
8994+ if (ret == 0 ) {
8995+ XSTRNCAT (tmp , "\n" , XSTRLEN ("\n" ) + 1 );
8996+ }
8997+ if (ret == 0 && wolfSSL_BIO_write (bio , tmp , (int )XSTRLEN (tmp )) <= 0 ) {
8998+ ret = WOLFSSL_FAILURE ;
89568999 }
89579000 }
89589001#endif
89599002
8960- return WOLFSSL_SUCCESS ;
9003+ if (ret == 0 ) {
9004+ ret = WOLFSSL_SUCCESS ;
9005+ }
9006+
9007+ return ret ;
89619008}
89629009
89639010/* iterate through a CRL's Revoked Certs and print out in human
@@ -9189,7 +9236,7 @@ void wolfSSL_X509_CRL_free(WOLFSSL_X509_CRL *crl)
91899236}
91909237#endif /* HAVE_CRL && (OPENSSL_EXTRA || WOLFSSL_WPAS_SMALL) */
91919238
9192- #ifdef OPENSSL_EXTRA
9239+ #if defined( HAVE_CRL ) && defined( OPENSSL_EXTRA )
91939240WOLFSSL_ASN1_TIME * wolfSSL_X509_CRL_get_lastUpdate (WOLFSSL_X509_CRL * crl )
91949241{
91959242 if ((crl != NULL ) && (crl -> crlList != NULL ) &&
@@ -9219,7 +9266,7 @@ int wolfSSL_X509_CRL_verify(WOLFSSL_X509_CRL* crl, WOLFSSL_EVP_PKEY* key)
92199266 return 0 ;
92209267}
92219268#endif
9222- #endif /* OPENSSL_EXTRA */
9269+ #endif /* HAVE_CRL && OPENSSL_EXTRA */
92239270
92249271#ifdef OPENSSL_EXTRA
92259272
0 commit comments