Skip to content

Commit f85e607

Browse files
committed
Revert Type error for X.590 certificates
1 parent c552b44 commit f85e607

17 files changed

+141
-103
lines changed

ext/openssl/openssl.c

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1497,8 +1497,8 @@ PHP_FUNCTION(openssl_x509_export_to_file)
14971497

14981498
cert = php_openssl_x509_from_param(cert_obj, cert_str);
14991499
if (cert == NULL) {
1500-
zend_argument_type_error(1, "cannot be coerced into an X.509 Certificate");
1501-
RETURN_THROWS();
1500+
php_error_docref(NULL, E_WARNING, "X.509 Certificate cannot be retrieved");
1501+
return;
15021502
}
15031503

15041504
if (php_openssl_open_base_dir_chk(filename)) {
@@ -1811,8 +1811,8 @@ PHP_FUNCTION(openssl_x509_export)
18111811

18121812
cert = php_openssl_x509_from_param(cert_obj, cert_str);
18131813
if (cert == NULL) {
1814-
zend_argument_type_error(1, "cannot be coerced into an X.509 Certificate");
1815-
RETURN_THROWS();
1814+
php_error_docref(NULL, E_WARNING, "X.509 Certificate cannot be retrieved");
1815+
return;
18161816
}
18171817

18181818
bio_out = BIO_new(BIO_s_mem());
@@ -1889,8 +1889,8 @@ PHP_FUNCTION(openssl_x509_fingerprint)
18891889

18901890
cert = php_openssl_x509_from_param(cert_obj, cert_str);
18911891
if (cert == NULL) {
1892-
zend_argument_type_error(1, "cannot be coerced into an X.509 Certificate");
1893-
RETURN_THROWS();
1892+
php_error_docref(NULL, E_WARNING, "X.509 Certificate cannot be retrieved");
1893+
RETURN_FALSE;
18941894
}
18951895

18961896
fingerprint = php_openssl_x509_fingerprint(cert, method, raw_output);
@@ -2087,8 +2087,8 @@ PHP_FUNCTION(openssl_x509_parse)
20872087

20882088
cert = php_openssl_x509_from_param(cert_obj, cert_str);
20892089
if (cert == NULL) {
2090-
zend_argument_type_error(1, "cannot be coerced into an X.509 Certificate");
2091-
RETURN_THROWS();
2090+
// TODO Add Warning?
2091+
RETURN_FALSE;
20922092
}
20932093
array_init(return_value);
20942094

@@ -2348,7 +2348,7 @@ PHP_FUNCTION(openssl_x509_checkpurpose)
23482348
}
23492349
cert = php_openssl_x509_from_param(cert_obj, cert_str);
23502350
if (cert == NULL) {
2351-
zend_argument_type_error(1, "cannot be coerced into an X.509 Certificate");
2351+
// TODO Add Warning?
23522352
goto clean_exit;
23532353
}
23542354

@@ -2455,8 +2455,8 @@ PHP_FUNCTION(openssl_x509_read)
24552455

24562456
cert = php_openssl_x509_from_param(cert_obj, cert_str);
24572457
if (cert == NULL) {
2458-
zend_argument_type_error(1, "cannot be coerced into an X.509 Certificate");
2459-
RETURN_THROWS();
2458+
php_error_docref(NULL, E_WARNING, "X.509 Certificate cannot be retrieved");
2459+
RETURN_FALSE;
24602460
}
24612461

24622462
object_init_ex(return_value, php_openssl_certificate_ce);
@@ -2504,7 +2504,7 @@ static STACK_OF(X509) * php_array_to_X509_sk(zval * zcerts) /* {{{ */
25042504
ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(zcerts), zcertval) {
25052505
cert = php_openssl_x509_from_zval(zcertval, &free_cert);
25062506
if (cert == NULL) {
2507-
// TODO Add ValueError?
2507+
// TODO Add Warning?
25082508
goto clean_exit;
25092509
}
25102510

@@ -2524,7 +2524,7 @@ static STACK_OF(X509) * php_array_to_X509_sk(zval * zcerts) /* {{{ */
25242524
cert = php_openssl_x509_from_zval(zcerts, &free_cert);
25252525

25262526
if (cert == NULL) {
2527-
// TODO Add ValueError?
2527+
// TODO Add Warning?
25282528
goto clean_exit;
25292529
}
25302530

@@ -2575,8 +2575,8 @@ PHP_FUNCTION(openssl_pkcs12_export_to_file)
25752575

25762576
cert = php_openssl_x509_from_param(cert_obj, cert_str);
25772577
if (cert == NULL) {
2578-
zend_argument_type_error(1, "cannot be coerced into an X.509 Certificate");
2579-
RETURN_THROWS();
2578+
php_error_docref(NULL, E_WARNING, "X.509 Certificate cannot be retrieved");
2579+
return;
25802580
}
25812581

25822582
priv_key = php_openssl_pkey_from_zval(zpkey, 0, "", 0, &free_pkey);
@@ -2678,8 +2678,8 @@ PHP_FUNCTION(openssl_pkcs12_export)
26782678

26792679
cert = php_openssl_x509_from_param(cert_obj, cert_str);
26802680
if (cert == NULL) {
2681-
zend_argument_type_error(1, "cannot be coerced into an X.509 Certificate");
2682-
RETURN_THROWS();
2681+
php_error_docref(NULL, E_WARNING, "X.509 Certificate cannot be retrieved");
2682+
return;
26832683
}
26842684

26852685
priv_key = php_openssl_pkey_from_zval(zpkey, 0, "", 0, &free_pkey);
@@ -3088,8 +3088,8 @@ PHP_FUNCTION(openssl_csr_export_to_file)
30883088

30893089
csr = php_openssl_csr_from_param(csr_obj, csr_str);
30903090
if (csr == NULL) {
3091-
zend_argument_type_error(1, "cannot be coerced into an X.509 Certificate Signing Request");
3092-
RETURN_THROWS();
3091+
php_error_docref(NULL, E_WARNING, "X.509 Certificate Signing Request cannot be retrieved");
3092+
return;
30933093
}
30943094

30953095
if (php_openssl_open_base_dir_chk(filename)) {
@@ -3140,8 +3140,8 @@ PHP_FUNCTION(openssl_csr_export)
31403140

31413141
csr = php_openssl_csr_from_param(csr_obj, csr_str);
31423142
if (csr == NULL) {
3143-
zend_argument_type_error(1, "cannot be coerced into an X.509 Certificate Signing Request");
3144-
RETURN_THROWS();
3143+
php_error_docref(NULL, E_WARNING, "X.509 Certificate Signing Request cannot be retrieved");
3144+
return;
31453145
}
31463146

31473147
/* export to a var */
@@ -3202,16 +3202,16 @@ PHP_FUNCTION(openssl_csr_sign)
32023202

32033203
csr = php_openssl_csr_from_param(csr_obj, csr_str);
32043204
if (csr == NULL) {
3205-
zend_argument_type_error(1, "cannot be coerced into an X.509 Certificate Signing Request");
3206-
RETURN_THROWS();
3205+
php_error_docref(NULL, E_WARNING, "X.509 Certificate Signing Request cannot be retrieved");
3206+
return;
32073207
}
32083208

32093209
PHP_SSL_REQ_INIT(&req);
32103210

32113211
if (cert_str || cert_obj) {
32123212
cert = php_openssl_x509_from_param(cert_obj, cert_str);
32133213
if (cert == NULL) {
3214-
zend_argument_type_error(2, "cannot be coerced into an X.509 Certificate");
3214+
php_error_docref(NULL, E_WARNING, "X.509 Certificate cannot be retrieved");
32153215
goto cleanup;
32163216
}
32173217
}
@@ -5072,7 +5072,7 @@ PHP_FUNCTION(openssl_pkcs7_encrypt)
50725072

50735073
cert = php_openssl_x509_from_zval(zcertval, &free_cert);
50745074
if (cert == NULL) {
5075-
zend_argument_value_error(3, "must be a valid X.509 Certificate");
5075+
// TODO Add warning?
50765076
goto clean_exit;
50775077
}
50785078

@@ -5093,7 +5093,7 @@ PHP_FUNCTION(openssl_pkcs7_encrypt)
50935093

50945094
cert = php_openssl_x509_from_zval(zrecipcerts, &free_cert);
50955095
if (cert == NULL) {
5096-
zend_argument_value_error(3, "must be a valid X.509 Certificate");
5096+
// TODO Add warning?
50975097
goto clean_exit;
50985098
}
50995099

@@ -5315,7 +5315,7 @@ PHP_FUNCTION(openssl_pkcs7_sign)
53155315

53165316
cert = php_openssl_x509_from_param(cert_obj, cert_str);
53175317
if (cert == NULL) {
5318-
zend_argument_type_error(3, "cannot be coerced into an X.509 Certificate");
5318+
php_error_docref(NULL, E_WARNING, "X.509 Certificate cannot be retrieved");
53195319
goto clean_exit;
53205320
}
53215321

@@ -5418,7 +5418,7 @@ PHP_FUNCTION(openssl_pkcs7_decrypt)
54185418

54195419
cert = php_openssl_x509_from_zval(recipcert, &free_recipcert);
54205420
if (cert == NULL) {
5421-
zend_argument_type_error(3, "cannot be coerced into an X.509 Certificate");
5421+
php_error_docref(NULL, E_WARNING, "X.509 Certificate cannot be retrieved");
54225422
goto clean_exit;
54235423
}
54245424

ext/openssl/tests/bug38261.phpt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ try {
4646

4747
?>
4848
--EXPECT--
49-
openssl_x509_parse(): Argument #1 ($x509) cannot be coerced into an X.509 Certificate
50-
openssl_x509_parse(): Argument #1 ($x509) cannot be coerced into an X.509 Certificate
49+
bool(false)
50+
bool(false)
5151
openssl_x509_parse(): Argument #1 ($x509) must be of type OpenSSLCertificate|string, array given
52-
openssl_x509_parse(): Argument #1 ($x509) cannot be coerced into an X.509 Certificate
52+
bool(false)
5353
openssl_x509_parse(): Argument #1 ($x509) must be of type OpenSSLCertificate|string, stdClass given

ext/openssl/tests/openssl_csr_export_basic.phpt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,10 @@ try {
3939
}
4040
var_dump(openssl_csr_export($csr, $output, false));
4141
?>
42-
--EXPECT--
42+
--EXPECTF--
4343
bool(true)
44-
openssl_csr_export(): Argument #1 ($csr) cannot be coerced into an X.509 Certificate Signing Request
44+
45+
Warning: openssl_csr_export(): X.509 Certificate Signing Request cannot be retrieved in %s on line %d
46+
bool(false)
4547
openssl_csr_export(): Argument #1 ($csr) must be of type OpenSSLCertificateSigningRequest|string, OpenSSLAsymmetricKey given
4648
bool(true)

ext/openssl/tests/openssl_csr_export_to_file_basic.phpt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ sfBgVeqg0P4SWez5fHXqBNcjMdMI5f0bikcDZSIfTHS8FX+PMurLBC8UPB0YNIOl
7878
JViHkCA9x6m8RJXAFvqmgLlWlUzbDv/cRrDfjWjR
7979
-----END CERTIFICATE REQUEST-----
8080
"
81-
openssl_csr_export_to_file(): Argument #1 ($csr) cannot be coerced into an X.509 Certificate Signing Request
81+
82+
Warning: openssl_csr_export_to_file(): X.509 Certificate Signing Request cannot be retrieved in %s on line %d
83+
bool(false)
8284
openssl_csr_export_to_file(): Argument #1 ($csr) must be of type OpenSSLCertificateSigningRequest|string, OpenSSLAsymmetricKey given
8385
bool(true)

ext/openssl/tests/openssl_csr_sign_basic.phpt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,15 @@ object(OpenSSLCertificate)#3 (0) {
8181
}
8282
object(OpenSSLCertificate)#4 (0) {
8383
}
84-
openssl_csr_sign(): Argument #2 ($cacert) cannot be coerced into an X.509 Certificate
84+
85+
Warning: openssl_csr_sign(): X.509 Certificate cannot be retrieved in %s on line %d
86+
bool(false)
8587

8688
Warning: openssl_csr_sign(): Cannot get private key from parameter 3 in %s on line %d
8789
bool(false)
88-
openssl_csr_sign(): Argument #1 ($csr) cannot be coerced into an X.509 Certificate Signing Request
90+
91+
Warning: openssl_csr_sign(): X.509 Certificate Signing Request cannot be retrieved in %s on line %d
92+
bool(false)
8993
openssl_csr_sign(): Argument #1 ($csr) must be of type OpenSSLCertificateSigningRequest|string, array given
9094
openssl_csr_sign(): Argument #2 ($cacert) must be of type OpenSSLCertificate|string|null, array given
9195
Key array must be of the form array(0 => key, 1 => phrase)

ext/openssl/tests/openssl_error_string_basic.phpt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ if (is_file($output_file)) {
194194
unlink($output_file);
195195
}
196196
?>
197-
--EXPECT--
197+
--EXPECTF--
198198
string(89) "error:0607A082:digital envelope routines:EVP_CIPHER_CTX_set_key_length:invalid key length"
199199
bool(false)
200200
int(15)
@@ -210,8 +210,12 @@ openssl_private_encrypt: ok
210210
openssl_private_decrypt: ok
211211
openssl_private_(en|de)crypt padding: ok
212212
X509 errors
213-
openssl_x509_export_to_file(): Argument #1 ($x509) cannot be coerced into an X.509 Certificate
214-
openssl_x509_export_to_file(): Argument #1 ($x509) cannot be coerced into an X.509 Certificate
213+
214+
Warning: openssl_x509_export_to_file(): X.509 Certificate cannot be retrieved in %s on line %d
215+
openssl_x509_export_to_file open: ok
216+
217+
Warning: openssl_x509_export_to_file(): X.509 Certificate cannot be retrieved in %s on line %d
218+
openssl_x509_export_to_file pem: ok
215219
openssl_x509_export_to_file write: ok
216220
openssl_x509_checkpurpose purpose: ok
217221
CSR errors

ext/openssl/tests/openssl_pkcs12_export_basic.phpt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ try {
4646
}
4747
//var_dump(openssl_pkcs12_export($cert, $output, $priv, $pass, array("foo")));
4848
?>
49-
--EXPECT--
49+
--EXPECTF--
5050
bool(true)
5151
bool(true)
5252
bool(true)
@@ -56,6 +56,10 @@ bool(true)
5656
bool(true)
5757
bool(true)
5858
int(3)
59-
openssl_pkcs12_export(): Argument #1 ($x509) cannot be coerced into an X.509 Certificate
60-
openssl_pkcs12_export(): Argument #1 ($x509) cannot be coerced into an X.509 Certificate
59+
60+
Warning: openssl_pkcs12_export(): X.509 Certificate cannot be retrieved in %s on line %d
61+
bool(false)
62+
63+
Warning: openssl_pkcs12_export(): X.509 Certificate cannot be retrieved in %s on line %d
64+
bool(false)
6165
openssl_pkcs12_export(): Argument #1 ($x509) must be of type OpenSSLCertificate|string, OpenSSLAsymmetricKey given

ext/openssl/tests/openssl_pkcs12_export_to_file_basic.phpt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ if (file_exists($pkcsfile)) {
5454
unlink($pkcsfile);
5555
}
5656
?>
57-
--EXPECT--
57+
--EXPECTF--
5858
bool(true)
5959
bool(true)
6060
bool(true)
@@ -63,6 +63,10 @@ bool(true)
6363
bool(true)
6464
bool(true)
6565
bool(true)
66-
openssl_pkcs12_export_to_file(): Argument #1 ($x509cert) cannot be coerced into an X.509 Certificate
67-
openssl_pkcs12_export_to_file(): Argument #1 ($x509cert) cannot be coerced into an X.509 Certificate
66+
67+
Warning: openssl_pkcs12_export_to_file(): X.509 Certificate cannot be retrieved in %s on line %d
68+
bool(false)
69+
70+
Warning: openssl_pkcs12_export_to_file(): X.509 Certificate cannot be retrieved in %s on line %d
71+
bool(false)
6872
openssl_pkcs12_export_to_file(): Argument #1 ($x509cert) must be of type OpenSSLCertificate|string, OpenSSLAsymmetricKey given

ext/openssl/tests/openssl_pkcs7_decrypt_basic.phpt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,18 @@ bool(true)
6363

6464
Warning: openssl_pkcs7_decrypt(): Unable to get private key in %s on line %d
6565
bool(false)
66-
openssl_pkcs7_decrypt(): Argument #3 ($recipcert) cannot be coerced into an X.509 Certificate
67-
openssl_pkcs7_decrypt(): Argument #3 ($recipcert) cannot be coerced into an X.509 Certificate
66+
67+
Warning: openssl_pkcs7_decrypt(): X.509 Certificate cannot be retrieved in %s on line %d
68+
bool(false)
69+
70+
Warning: openssl_pkcs7_decrypt(): X.509 Certificate cannot be retrieved in %s on line %d
6871
bool(false)
6972
bool(false)
7073
bool(false)
71-
openssl_pkcs7_decrypt(): Argument #3 ($recipcert) cannot be coerced into an X.509 Certificate
74+
bool(false)
75+
76+
Warning: openssl_pkcs7_decrypt(): X.509 Certificate cannot be retrieved in %s on line %d
77+
bool(false)
7278

7379
Warning: openssl_pkcs7_decrypt(): Unable to get private key in %s on line %d
7480
bool(false)

ext/openssl/tests/openssl_pkcs7_decrypt_error.phpt

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,20 @@ try {
3939
}
4040

4141
?>
42-
--EXPECT--
42+
--EXPECTF--
43+
Warning: openssl_pkcs7_decrypt(): X.509 Certificate cannot be retrieved in %s on line %d
4344
Object of class stdClass could not be converted to string
4445
object(stdClass)#1 (0) {
4546
}
46-
openssl_pkcs7_decrypt(): Argument #3 ($recipcert) cannot be coerced into an X.509 Certificate
47-
openssl_pkcs7_decrypt(): Argument #3 ($recipcert) cannot be coerced into an X.509 Certificate
48-
openssl_pkcs7_decrypt(): Argument #3 ($recipcert) cannot be coerced into an X.509 Certificate
49-
openssl_pkcs7_decrypt(): Argument #3 ($recipcert) cannot be coerced into an X.509 Certificate
47+
48+
Warning: openssl_pkcs7_decrypt(): X.509 Certificate cannot be retrieved in %s on line %d
49+
bool(false)
50+
51+
Warning: openssl_pkcs7_decrypt(): X.509 Certificate cannot be retrieved in %s on line %d
52+
bool(false)
53+
54+
Warning: openssl_pkcs7_decrypt(): X.509 Certificate cannot be retrieved in %s on line %d
55+
bool(false)
56+
57+
Warning: openssl_pkcs7_decrypt(): X.509 Certificate cannot be retrieved in %s on line %d
58+
bool(false)

ext/openssl/tests/openssl_pkcs7_encrypt_basic.phpt

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,8 @@ var_dump(openssl_pkcs7_encrypt($infile, $outfile, $single_cert, $empty_headers))
2929
var_dump(openssl_pkcs7_encrypt($wrong, $outfile, $single_cert, $headers));
3030
var_dump(openssl_pkcs7_encrypt($empty, $outfile, $single_cert, $headers));
3131
var_dump(openssl_pkcs7_encrypt($infile, $empty, $single_cert, $headers));
32-
33-
try {
34-
var_dump(openssl_pkcs7_encrypt($infile, $outfile, $wrong, $headers));
35-
} catch (\ValueError $e) {
36-
echo $e->getMessage() . \PHP_EOL;
37-
}
38-
try {
39-
var_dump(openssl_pkcs7_encrypt($infile, $outfile, $empty, $headers));
40-
} catch (\ValueError $e) {
41-
echo $e->getMessage() . \PHP_EOL;
42-
}
32+
var_dump(openssl_pkcs7_encrypt($infile, $outfile, $wrong, $headers));
33+
var_dump(openssl_pkcs7_encrypt($infile, $outfile, $empty, $headers));
4334
var_dump(openssl_pkcs7_encrypt($infile, $outfile, $multi_certs, $headers));
4435
var_dump(openssl_pkcs7_encrypt($infile, $outfile, array_map('openssl_x509_read', $multi_certs) , $headers));
4536

@@ -61,8 +52,8 @@ bool(true)
6152
bool(false)
6253
bool(false)
6354
bool(false)
64-
openssl_pkcs7_encrypt(): Argument #3 ($recipcerts) must be a valid X.509 Certificate
65-
openssl_pkcs7_encrypt(): Argument #3 ($recipcerts) must be a valid X.509 Certificate
55+
bool(false)
56+
bool(false)
6657
bool(true)
6758
bool(true)
6859
true

0 commit comments

Comments
 (0)