@@ -436,17 +436,20 @@ static bool php_openssl_matches_san_list(X509 *peer, const char *subject_name) /
436
436
{
437
437
int i , len ;
438
438
unsigned char * cert_name = NULL ;
439
- char ipbuffer [64 ], ipv6_expanded [40 ];
440
- unsigned char ipv6 [16 ];
439
+ char ipbuffer [64 ];
441
440
442
441
GENERAL_NAMES * alt_names = X509_get_ext_d2i (peer , NID_subject_alt_name , 0 , 0 );
443
442
int alt_name_count = sk_GENERAL_NAME_num (alt_names );
444
443
445
- /* detect if subject name is an IPv6 address and expand once if required */
446
- ipv6_expanded [0 ] = 0 ;
447
444
#if defined(HAVE_IPV6 ) && defined(HAVE_INET_PTON )
445
+ /* detect if subject name is an IPv6 address and expand once if required */
446
+ char subject_name_ipv6_expanded [40 ];
447
+ unsigned char ipv6 [16 ];
448
+ bool subject_name_is_ipv6 = false;
449
+ subject_name_ipv6_expanded [0 ] = 0 ;
448
450
if (inet_pton (AF_INET6 ,subject_name ,& ipv6 )) {
449
- EXPAND_IPV6_ADDRESS (ipv6_expanded , ipv6 );
451
+ EXPAND_IPV6_ADDRESS (subject_name_ipv6_expanded , ipv6 );
452
+ subject_name_is_ipv6 = true;
450
453
}
451
454
#endif
452
455
@@ -487,15 +490,18 @@ static bool php_openssl_matches_san_list(X509 *peer, const char *subject_name) /
487
490
488
491
return 1 ;
489
492
}
490
- } else if (san -> d .ip -> length == 16 && strlen (ipv6_expanded ) >= 15 ) { /* shortest expanded IPv6 address is 0:0:0:0:0:0:0:0 */
493
+ }
494
+ #if defined(HAVE_IPV6 ) && defined(HAVE_INET_PTON )
495
+ else if (san -> d .ip -> length == 16 && subject_name_is_ipv6 ) {
491
496
ipbuffer [0 ] = 0 ;
492
497
EXPAND_IPV6_ADDRESS (ipbuffer , san -> d .iPAddress -> data );
493
- if (strcasecmp ((const char * )ipv6_expanded , (const char * )ipbuffer ) == 0 ) {
498
+ if (strcasecmp ((const char * )subject_name_ipv6_expanded , (const char * )ipbuffer ) == 0 ) {
494
499
sk_GENERAL_NAME_pop_free (alt_names , GENERAL_NAME_free );
495
500
496
501
return 1 ;
497
502
}
498
503
}
504
+ #endif
499
505
}
500
506
}
501
507
0 commit comments