Skip to content

Commit dc29937

Browse files
committed
Merge pull request php#5 from weltling/string_size_refactor_take_2
String size refactor take 2, partial fixes to ext/standard
2 parents 221b9d4 + 91ceb29 commit dc29937

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

59 files changed

+317
-166
lines changed

Zend/zend.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -1098,7 +1098,7 @@ ZEND_API void zend_error(int type, const char *format, ...) /* {{{ */
10981098
if(DTRACE_ERROR_ENABLED()) {
10991099
char *dtrace_error_buffer;
11001100
zend_vspprintf(&dtrace_error_buffer, 0, format, args);
1101-
DTRACE_ERROR(dtrace_error_buffer, error_filename, error_lineno);
1101+
DTRACE_ERROR(dtrace_error_buffer, (char *)error_filename, error_lineno);
11021102
efree(dtrace_error_buffer);
11031103
}
11041104
#endif /* HAVE_DTRACE */

Zend/zend_dtrace.c

+11-11
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
#ifdef HAVE_DTRACE
2626
/* PHP DTrace probes {{{ */
27-
static inline char *dtrace_get_executed_filename(TSRMLS_D)
27+
static inline const char *dtrace_get_executed_filename(TSRMLS_D)
2828
{
2929
if (EG(current_execute_data) && EG(current_execute_data)->op_array) {
3030
return EG(current_execute_data)->op_array->filename;
@@ -36,9 +36,9 @@ static inline char *dtrace_get_executed_filename(TSRMLS_D)
3636
ZEND_API zend_op_array *dtrace_compile_file(zend_file_handle *file_handle, int type TSRMLS_DC)
3737
{
3838
zend_op_array *res;
39-
DTRACE_COMPILE_FILE_ENTRY(file_handle->opened_path, file_handle->filename);
39+
DTRACE_COMPILE_FILE_ENTRY(file_handle->opened_path, (char *)file_handle->filename);
4040
res = compile_file(file_handle, type TSRMLS_CC);
41-
DTRACE_COMPILE_FILE_RETURN(file_handle->opened_path, file_handle->filename);
41+
DTRACE_COMPILE_FILE_RETURN(file_handle->opened_path, (char *)file_handle->filename);
4242

4343
return res;
4444
}
@@ -47,7 +47,7 @@ ZEND_API zend_op_array *dtrace_compile_file(zend_file_handle *file_handle, int t
4747
ZEND_API void dtrace_execute_ex(zend_execute_data *execute_data TSRMLS_DC)
4848
{
4949
int lineno;
50-
char *scope, *filename, *funcname, *classname;
50+
const char *scope, *filename, *funcname, *classname;
5151
scope = filename = funcname = classname = NULL;
5252

5353
/* we need filename and lineno for both execute and function probes */
@@ -65,41 +65,41 @@ ZEND_API void dtrace_execute_ex(zend_execute_data *execute_data TSRMLS_DC)
6565
}
6666

6767
if (DTRACE_EXECUTE_ENTRY_ENABLED()) {
68-
DTRACE_EXECUTE_ENTRY(filename, lineno);
68+
DTRACE_EXECUTE_ENTRY((char *)filename, lineno);
6969
}
7070

7171
if (DTRACE_FUNCTION_ENTRY_ENABLED() && funcname != NULL) {
72-
DTRACE_FUNCTION_ENTRY(funcname, filename, lineno, classname, scope);
72+
DTRACE_FUNCTION_ENTRY((char *)funcname, (char *)filename, lineno, (char *)classname, (char *)scope);
7373
}
7474

7575
execute_ex(execute_data TSRMLS_CC);
7676

7777
if (DTRACE_FUNCTION_RETURN_ENABLED() && funcname != NULL) {
78-
DTRACE_FUNCTION_RETURN(funcname, filename, lineno, classname, scope);
78+
DTRACE_FUNCTION_RETURN((char *)funcname, (char *)filename, lineno, (char *)classname, (char *)scope);
7979
}
8080

8181
if (DTRACE_EXECUTE_RETURN_ENABLED()) {
82-
DTRACE_EXECUTE_RETURN(filename, lineno);
82+
DTRACE_EXECUTE_RETURN((char *)filename, lineno);
8383
}
8484
}
8585

8686
ZEND_API void dtrace_execute_internal(zend_execute_data *execute_data_ptr, zend_fcall_info *fci, int return_value_used TSRMLS_DC)
8787
{
8888
int lineno;
89-
char *filename;
89+
const char *filename;
9090
if (DTRACE_EXECUTE_ENTRY_ENABLED() || DTRACE_EXECUTE_RETURN_ENABLED()) {
9191
filename = dtrace_get_executed_filename(TSRMLS_C);
9292
lineno = zend_get_executed_lineno(TSRMLS_C);
9393
}
9494

9595
if (DTRACE_EXECUTE_ENTRY_ENABLED()) {
96-
DTRACE_EXECUTE_ENTRY(filename, lineno);
96+
DTRACE_EXECUTE_ENTRY((char *)filename, lineno);
9797
}
9898

9999
execute_internal(execute_data_ptr, fci, return_value_used TSRMLS_CC);
100100

101101
if (DTRACE_EXECUTE_RETURN_ENABLED()) {
102-
DTRACE_EXECUTE_RETURN(filename, lineno);
102+
DTRACE_EXECUTE_RETURN((char *)filename, lineno);
103103
}
104104
}
105105

Zend/zend_exceptions.c

+3-3
Original file line numberDiff line numberDiff line change
@@ -85,12 +85,12 @@ void zend_throw_exception_internal(zval *exception TSRMLS_DC) /* {{{ */
8585
{
8686
#ifdef HAVE_DTRACE
8787
if (DTRACE_EXCEPTION_THROWN_ENABLED()) {
88-
char *classname;
89-
zend_str_size name_len;
88+
const char *classname;
89+
zend_str_size_uint name_len;
9090

9191
if (exception != NULL) {
9292
zend_get_object_classname(exception, &classname, &name_len TSRMLS_CC);
93-
DTRACE_EXCEPTION_THROWN(classname);
93+
DTRACE_EXCEPTION_THROWN((char *)classname);
9494
} else {
9595
DTRACE_EXCEPTION_THROWN(NULL);
9696
}

Zend/zend_operators.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ static inline zend_uchar is_numeric_string(const char *str, zend_str_size_int le
269269
return is_numeric_string_ex(str, length, lval, dval, allow_errors, NULL);
270270
}
271271

272-
static inline char *
272+
static inline const char *
273273
zend_memnstr(const char *haystack, const char *needle, zend_str_size_int needle_len, char *end)
274274
{
275275
const char *p = haystack;

Zend/zend_vm_def.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -3015,7 +3015,7 @@ ZEND_VM_HANDLER(107, ZEND_CATCH, CONST, CV)
30153015

30163016
#ifdef HAVE_DTRACE
30173017
if (DTRACE_EXCEPTION_CAUGHT_ENABLED()) {
3018-
DTRACE_EXCEPTION_CAUGHT(ce->name);
3018+
DTRACE_EXCEPTION_CAUGHT((char *)ce->name);
30193019
}
30203020
#endif /* HAVE_DTRACE */
30213021

Zend/zend_vm_execute.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -7127,7 +7127,7 @@ static int ZEND_FASTCALL ZEND_CATCH_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_A
71277127

71287128
#ifdef HAVE_DTRACE
71297129
if (DTRACE_EXCEPTION_CAUGHT_ENABLED()) {
7130-
DTRACE_EXCEPTION_CAUGHT(ce->name);
7130+
DTRACE_EXCEPTION_CAUGHT((char *)ce->name);
71317131
}
71327132
#endif /* HAVE_DTRACE */
71337133

ext/date/php_date.c

+3-3
Original file line numberDiff line numberDiff line change
@@ -1041,7 +1041,7 @@ char *php_date_short_day_name(timelib_sll y, timelib_sll m, timelib_sll d)
10411041
static char *date_format(char *format, zend_str_size_int format_len, timelib_time *t, int localtime)
10421042
{
10431043
smart_str string = {0};
1044-
zend_str_size i, length;
1044+
zend_str_size_int i, length = 0;
10451045
char buffer[97];
10461046
timelib_time_offset *offset = NULL;
10471047
timelib_sll isoweek, isoyear;
@@ -2539,8 +2539,8 @@ PHPAPI int php_date_initialize(php_date_obj *dateobj, /*const*/ char *time_str,
25392539
timelib_time *now;
25402540
timelib_tzinfo *tzi = NULL;
25412541
timelib_error_container *err = NULL;
2542-
int type = TIMELIB_ZONETYPE_ID, new_dst;
2543-
char *new_abbr;
2542+
int type = TIMELIB_ZONETYPE_ID, new_dst = 0;
2543+
char *new_abbr = NULL;
25442544
timelib_sll new_offset;
25452545

25462546
if (dateobj->time) {

ext/dom/xpath.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ const zend_function_entry php_dom_xpath_class_functions[] = {
7474

7575
static void dom_xpath_ext_function_php(xmlXPathParserContextPtr ctxt, int nargs, int type) /* {{{ */
7676
{
77-
zval **args;
77+
zval **args = NULL;
7878
zval *retval;
7979
int result, i, ret;
8080
int error = 0;

ext/gd/gd.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -2442,7 +2442,7 @@ static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type,
24422442
fflush(fp);
24432443
}
24442444

2445-
register_im:
2445+
/* register_im: */
24462446
if (im) {
24472447
ZEND_REGISTER_RESOURCE(return_value, im, le_gd);
24482448
php_stream_close(stream);

ext/gd/libgd/gd.c

-1
Original file line numberDiff line numberDiff line change
@@ -3011,7 +3011,6 @@ void gdImageGetClip (gdImagePtr im, int *x1P, int *y1P, int *x2P, int *y2P)
30113011
int gdImagePaletteToTrueColor(gdImagePtr src)
30123012
{
30133013
unsigned int y;
3014-
unsigned char alloc_y = 0;
30153014
unsigned int yy;
30163015

30173016
if (src == NULL) {

ext/gmp/gmp.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -1363,7 +1363,7 @@ ZEND_FUNCTION(gmp_powm)
13631363
zval *base_arg, *exp_arg, *mod_arg;
13641364
mpz_ptr gmpnum_base, gmpnum_exp, gmpnum_mod, gmpnum_result;
13651365
int use_ui = 0;
1366-
gmp_temp_t temp_base, temp_exp, temp_mod;
1366+
gmp_temp_t temp_base = {0}, temp_exp = {0}, temp_mod;
13671367

13681368
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zzz", &base_arg, &exp_arg, &mod_arg) == FAILURE){
13691369
return;

ext/intl/grapheme/grapheme_util.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ void grapheme_substr_ascii(char *str, int str_len, int f, int l, int argc, char
130130
/* {{{ grapheme_strpos_utf16 - strrpos using utf16*/
131131
int grapheme_strpos_utf16(unsigned char *haystack, int32_t haystack_len, unsigned char*needle, int32_t needle_len, int32_t offset, int32_t *puchar_pos, int f_ignore_case, int last TSRMLS_DC)
132132
{
133-
UChar *uhaystack = NULL, *puhaystack, *uneedle = NULL;
133+
UChar *uhaystack = NULL, *uneedle = NULL;
134134
int32_t uhaystack_len = 0, uneedle_len = 0, char_pos, ret_pos, offset_pos = 0;
135135
unsigned char u_break_iterator_buffer[U_BRK_SAFECLONE_BUFFERSIZE];
136136
UBreakIterator* bi = NULL;

ext/intl/resourcebundle/resourcebundle_class.c

+2-2
Original file line numberDiff line numberDiff line change
@@ -161,8 +161,8 @@ PHP_FUNCTION( resourcebundle_create )
161161
/* {{{ resourcebundle_array_fetch */
162162
static void resourcebundle_array_fetch(zval *object, zval *offset, zval *return_value, int fallback TSRMLS_DC)
163163
{
164-
int32_t meindex;
165-
char * mekey;
164+
int32_t meindex = 0;
165+
char * mekey = NULL;
166166
long mekeylen;
167167
zend_bool is_numeric = 0;
168168
char *pbuf;

ext/oci8/oci8_statement.c

+4-4
Original file line numberDiff line numberDiff line change
@@ -124,14 +124,14 @@ php_oci_statement *php_oci_statement_create(php_oci_connection *connection, char
124124
Fetch implicit result set statement resource */
125125
php_oci_statement *php_oci_get_implicit_resultset(php_oci_statement *statement TSRMLS_DC)
126126
{
127-
void *result;
128-
ub4 rtype;
129-
php_oci_statement *statement2; /* implicit result set statement handle */
130-
131127
#if (OCI_MAJOR_VERSION < 12)
132128
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Implicit results are available in Oracle Database 12c onwards");
133129
return NULL;
134130
#else
131+
void *result;
132+
ub4 rtype;
133+
php_oci_statement *statement2; /* implicit result set statement handle */
134+
135135
PHP_OCI_CALL_RETURN(OCISTMTGETNEXTRESULT, statement->errcode, OCIStmtGetNextResult, (statement->stmt, statement->err, &result, &rtype, OCI_DEFAULT));
136136
if (statement->errcode == OCI_NO_DATA) {
137137
return NULL;

ext/openssl/openssl.c

+85-4
Original file line numberDiff line numberDiff line change
@@ -615,7 +615,7 @@ static void add_assoc_name_entry(zval * val, char * key, X509_NAME * name, int s
615615

616616
for (i = 0; i < X509_NAME_entry_count(name); i++) {
617617
unsigned char *to_add;
618-
int to_add_len;
618+
int to_add_len = 0;
619619

620620

621621
ne = X509_NAME_get_entry(name, i);
@@ -1529,7 +1529,6 @@ PHP_FUNCTION(openssl_spki_export)
15291529
EVP_PKEY *pkey = NULL;
15301530
NETSCAPE_SPKI *spki = NULL;
15311531
BIO *out = BIO_new(BIO_s_mem());
1532-
BUF_MEM *bio_buf;
15331532

15341533
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &spkstr, &spkstr_len) == FAILURE) {
15351534
return;
@@ -1710,6 +1709,74 @@ PHP_FUNCTION(openssl_x509_check_private_key)
17101709
}
17111710
/* }}} */
17121711

1712+
/* Special handling of subjectAltName, see CVE-2013-4073
1713+
* Christian Heimes
1714+
*/
1715+
1716+
static int openssl_x509v3_subjectAltName(BIO *bio, X509_EXTENSION *extension)
1717+
{
1718+
GENERAL_NAMES *names;
1719+
const X509V3_EXT_METHOD *method = NULL;
1720+
long i, length, num;
1721+
const unsigned char *p;
1722+
1723+
method = X509V3_EXT_get(extension);
1724+
if (method == NULL) {
1725+
return -1;
1726+
}
1727+
1728+
p = extension->value->data;
1729+
length = extension->value->length;
1730+
if (method->it) {
1731+
names = (GENERAL_NAMES*)(ASN1_item_d2i(NULL, &p, length,
1732+
ASN1_ITEM_ptr(method->it)));
1733+
} else {
1734+
names = (GENERAL_NAMES*)(method->d2i(NULL, &p, length));
1735+
}
1736+
if (names == NULL) {
1737+
return -1;
1738+
}
1739+
1740+
num = sk_GENERAL_NAME_num(names);
1741+
for (i = 0; i < num; i++) {
1742+
GENERAL_NAME *name;
1743+
ASN1_STRING *as;
1744+
name = sk_GENERAL_NAME_value(names, i);
1745+
switch (name->type) {
1746+
case GEN_EMAIL:
1747+
BIO_puts(bio, "email:");
1748+
as = name->d.rfc822Name;
1749+
BIO_write(bio, ASN1_STRING_data(as),
1750+
ASN1_STRING_length(as));
1751+
break;
1752+
case GEN_DNS:
1753+
BIO_puts(bio, "DNS:");
1754+
as = name->d.dNSName;
1755+
BIO_write(bio, ASN1_STRING_data(as),
1756+
ASN1_STRING_length(as));
1757+
break;
1758+
case GEN_URI:
1759+
BIO_puts(bio, "URI:");
1760+
as = name->d.uniformResourceIdentifier;
1761+
BIO_write(bio, ASN1_STRING_data(as),
1762+
ASN1_STRING_length(as));
1763+
break;
1764+
default:
1765+
/* use builtin print for GEN_OTHERNAME, GEN_X400,
1766+
* GEN_EDIPARTY, GEN_DIRNAME, GEN_IPADD and GEN_RID
1767+
*/
1768+
GENERAL_NAME_print(bio, name);
1769+
}
1770+
/* trailing ', ' except for last element */
1771+
if (i < (num - 1)) {
1772+
BIO_puts(bio, ", ");
1773+
}
1774+
}
1775+
sk_GENERAL_NAME_pop_free(names, GENERAL_NAME_free);
1776+
1777+
return 0;
1778+
}
1779+
17131780
/* {{{ proto array openssl_x509_parse(mixed x509 [, bool shortnames=true])
17141781
Returns an array of the fields/values of the CERT */
17151782
PHP_FUNCTION(openssl_x509_parse)
@@ -1806,15 +1873,29 @@ PHP_FUNCTION(openssl_x509_parse)
18061873

18071874

18081875
for (i = 0; i < X509_get_ext_count(cert); i++) {
1876+
int nid;
18091877
extension = X509_get_ext(cert, i);
1810-
if (OBJ_obj2nid(X509_EXTENSION_get_object(extension)) != NID_undef) {
1878+
nid = OBJ_obj2nid(X509_EXTENSION_get_object(extension));
1879+
if (nid != NID_undef) {
18111880
extname = (char *)OBJ_nid2sn(OBJ_obj2nid(X509_EXTENSION_get_object(extension)));
18121881
} else {
18131882
OBJ_obj2txt(buf, sizeof(buf)-1, X509_EXTENSION_get_object(extension), 1);
18141883
extname = buf;
18151884
}
18161885
bio_out = BIO_new(BIO_s_mem());
1817-
if (X509V3_EXT_print(bio_out, extension, 0, 0)) {
1886+
if (nid == NID_subject_alt_name) {
1887+
if (openssl_x509v3_subjectAltName(bio_out, extension) == 0) {
1888+
add_assoc_stringl(subitem, extname, bio_buf->data, bio_buf->length, 1);
1889+
} else {
1890+
zval_dtor(return_value);
1891+
if (certresource == -1 && cert) {
1892+
X509_free(cert);
1893+
}
1894+
BIO_free(bio_out);
1895+
RETURN_FALSE;
1896+
}
1897+
}
1898+
else if (X509V3_EXT_print(bio_out, extension, 0, 0)) {
18181899
BIO_get_mem_ptr(bio_out, &bio_buf);
18191900
add_assoc_stringl(subitem, extname, bio_buf->data, bio_buf->length, 1);
18201901
} else {

ext/openssl/tests/cve2013_4073.pem

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIE2DCCA8CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBxTELMAkGA1UEBhMCVVMx
3+
DzANBgNVBAgMBk9yZWdvbjESMBAGA1UEBwwJQmVhdmVydG9uMSMwIQYDVQQKDBpQ
4+
eXRob24gU29mdHdhcmUgRm91bmRhdGlvbjEgMB4GA1UECwwXUHl0aG9uIENvcmUg
5+
RGV2ZWxvcG1lbnQxJDAiBgNVBAMMG251bGwucHl0aG9uLm9yZwBleGFtcGxlLm9y
6+
ZzEkMCIGCSqGSIb3DQEJARYVcHl0aG9uLWRldkBweXRob24ub3JnMB4XDTEzMDgw
7+
NzEzMTE1MloXDTEzMDgwNzEzMTI1MlowgcUxCzAJBgNVBAYTAlVTMQ8wDQYDVQQI
8+
DAZPcmVnb24xEjAQBgNVBAcMCUJlYXZlcnRvbjEjMCEGA1UECgwaUHl0aG9uIFNv
9+
ZnR3YXJlIEZvdW5kYXRpb24xIDAeBgNVBAsMF1B5dGhvbiBDb3JlIERldmVsb3Bt
10+
ZW50MSQwIgYDVQQDDBtudWxsLnB5dGhvbi5vcmcAZXhhbXBsZS5vcmcxJDAiBgkq
11+
hkiG9w0BCQEWFXB5dGhvbi1kZXZAcHl0aG9uLm9yZzCCASIwDQYJKoZIhvcNAQEB
12+
BQADggEPADCCAQoCggEBALXq7cn7Rn1vO3aA3TrzA5QLp6bb7B3f/yN0CJ2XFj+j
13+
pHs+Gw6WWSUDpybiiKnPec33BFawq3kyblnBMjBU61ioy5HwQqVkJ8vUVjGIUq3P
14+
vX/wBmQfzCe4o4uM89gpHyUL9UYGG8oCRa17dgqcv7u5rg0Wq2B1rgY+nHwx3JIv
15+
KRrgSwyRkGzpN8WQ1yrXlxWjgI9de0mPVDDUlywcWze1q2kwaEPTM3hLAmD1PESA
16+
oY/n8A/RXoeeRs9i/Pm/DGUS8ZPINXk/yOzsR/XvvkTVroIeLZqfmFpnZeF0cHzL
17+
08LODkVJJ9zjLdT7SA4vnne4FEbAxDbKAq5qkYzaL4UCAwEAAaOB0DCBzTAMBgNV
18+
HRMBAf8EAjAAMB0GA1UdDgQWBBSIWlXAUv9hzVKjNQ/qWpwkOCL3XDALBgNVHQ8E
19+
BAMCBeAwgZAGA1UdEQSBiDCBhYIeYWx0bnVsbC5weXRob24ub3JnAGV4YW1wbGUu
20+
Y29tgSBudWxsQHB5dGhvbi5vcmcAdXNlckBleGFtcGxlLm9yZ4YpaHR0cDovL251
21+
bGwucHl0aG9uLm9yZwBodHRwOi8vZXhhbXBsZS5vcmeHBMAAAgGHECABDbgAAAAA
22+
AAAAAAAAAAEwDQYJKoZIhvcNAQEFBQADggEBAKxPRe99SaghcI6IWT7UNkJw9aO9
23+
i9eo0Fj2MUqxpKbdb9noRDy2CnHWf7EIYZ1gznXPdwzSN4YCjV5d+Q9xtBaowT0j
24+
HPERs1ZuytCNNJTmhyqZ8q6uzMLoht4IqH/FBfpvgaeC5tBTnTT0rD5A/olXeimk
25+
kX4LxlEx5RAvpGB2zZVRGr6LobD9rVK91xuHYNIxxxfEGE8tCCWjp0+3ksri9SXx
26+
VHWBnbM9YaL32u3hxm8sYB/Yb8WSBavJCWJJqRStVRHM1koZlJmXNx2BX4vPo6iW
27+
RFEIPQsFZRLrtnCAiEhyT8bC2s/Njlu6ly9gtJZWSV46Q3ZjBL4q9sHKqZQ=
28+
-----END CERTIFICATE-----

ext/openssl/tests/cve2013_4073.phpt

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
--TEST--
2+
CVE 2013-4073: Null-byte certificate handling
3+
--SKIPIF--
4+
<?php
5+
if (!extension_loaded("openssl")) die("skip");
6+
--FILE--
7+
<?php
8+
$cert = file_get_contents(__DIR__ . '/cve2013_4073.pem');
9+
$info = openssl_x509_parse($cert);
10+
var_export($info['extensions']);
11+
12+
--EXPECTF--
13+
array (
14+
'basicConstraints' => 'CA:FALSE',
15+
'subjectKeyIdentifier' => '88:5A:55:C0:52:FF:61:CD:52:A3:35:0F:EA:5A:9C:24:38:22:F7:5C',
16+
'keyUsage' => 'Digital Signature, Non Repudiation, Key Encipherment',
17+
'subjectAltName' => 'DNS:altnull.python.org' . "\0" . 'example.com, email:[email protected]' . "\0" . '[email protected], URI:http://null.python.org' . "\0" . 'http://example.org, IP Address:192.0.2.1, IP Address:2001:DB8:0:0:0:0:0:1
18+
',
19+
)

0 commit comments

Comments
 (0)