Skip to content

Commit 26ae4b8

Browse files
committed
Introduce and use OpenSSLException
1 parent c6fa554 commit 26ae4b8

File tree

4 files changed

+51
-9
lines changed

4 files changed

+51
-9
lines changed

ext/openssl/openssl.c

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ ZEND_DECLARE_MODULE_GLOBALS(openssl)
5858

5959
#include "openssl_arginfo.h"
6060

61+
/* OpenSSLException class */
62+
63+
zend_class_entry *php_openssl_exception_ce;
64+
6165
/* OpenSSLCertificate class */
6266

6367
zend_class_entry *php_openssl_certificate_ce;
@@ -229,7 +233,7 @@ static void php_openssl_session_free_obj(zend_object *object)
229233
#define PHP_OPENSSL_SESSION_CHECK() \
230234
php_openssl_session_object *obj = Z_OPENSSL_SESSION_P(ZEND_THIS); \
231235
if (!obj->session) { \
232-
zend_throw_exception(zend_ce_exception, "Session is not valid", 0); \
236+
zend_throw_exception(php_openssl_exception_ce, "Session is not valid", 0); \
233237
RETURN_THROWS(); \
234238
}
235239

@@ -247,7 +251,7 @@ PHP_METHOD(OpenSSLSession, export)
247251
if (format == ENCODING_DER) {
248252
int len = i2d_SSL_SESSION(obj->session, NULL);
249253
if (len <= 0) {
250-
zend_throw_exception(zend_ce_exception, "Failed to export session", 0);
254+
zend_throw_exception(php_openssl_exception_ce, "Failed to export session", 0);
251255
RETURN_THROWS();
252256
}
253257

@@ -262,13 +266,13 @@ PHP_METHOD(OpenSSLSession, export)
262266
if (format == ENCODING_PEM) {
263267
BIO *bio = BIO_new(BIO_s_mem());
264268
if (!bio) {
265-
zend_throw_exception(zend_ce_exception, "Failed to create BIO", 0);
269+
zend_throw_exception(php_openssl_exception_ce, "Failed to create BIO", 0);
266270
RETURN_THROWS();
267271
}
268272

269273
if (!PEM_write_bio_SSL_SESSION(bio, obj->session)) {
270274
BIO_free(bio);
271-
zend_throw_exception(zend_ce_exception, "Failed to export session as PEM", 0);
275+
zend_throw_exception(php_openssl_exception_ce, "Failed to export session as PEM", 0);
272276
RETURN_THROWS();
273277
}
274278

@@ -312,7 +316,7 @@ PHP_METHOD(OpenSSLSession, import)
312316
}
313317

314318
if (!session) {
315-
zend_throw_exception(zend_ce_exception, "Failed to import session data", 0);
319+
zend_throw_exception(php_openssl_exception_ce, "Failed to import session data", 0);
316320
RETURN_THROWS();
317321
}
318322

@@ -407,7 +411,7 @@ PHP_METHOD(OpenSSLSession, __serialize)
407411

408412
int len = i2d_SSL_SESSION(obj->session, NULL);
409413
if (len <= 0) {
410-
zend_throw_exception(zend_ce_exception, "Failed to serialize session", 0);
414+
zend_throw_exception(php_openssl_exception_ce, "Failed to serialize session", 0);
411415
RETURN_THROWS();
412416
}
413417

@@ -430,15 +434,15 @@ PHP_METHOD(OpenSSLSession, __unserialize)
430434

431435
zval *der_zv = zend_hash_str_find(data, ZEND_STRL("der"));
432436
if (!der_zv || Z_TYPE_P(der_zv) != IS_STRING) {
433-
zend_throw_exception(zend_ce_exception, "Invalid serialization data", 0);
437+
zend_throw_exception(php_openssl_exception_ce, "Invalid serialization data", 0);
434438
RETURN_THROWS();
435439
}
436440

437441
const unsigned char *p = (const unsigned char *)Z_STRVAL_P(der_zv);
438442
SSL_SESSION *session = d2i_SSL_SESSION(NULL, &p, Z_STRLEN_P(der_zv));
439443

440444
if (!session) {
441-
zend_throw_exception(zend_ce_exception, "Failed to unserialize session", 0);
445+
zend_throw_exception(php_openssl_exception_ce, "Failed to unserialize session", 0);
442446
RETURN_THROWS();
443447
}
444448

@@ -668,6 +672,8 @@ PHP_INI_END()
668672
/* {{{ PHP_MINIT_FUNCTION */
669673
PHP_MINIT_FUNCTION(openssl)
670674
{
675+
php_openssl_exception_ce = register_class_OpenSSLException(zend_ce_exception);
676+
671677
php_openssl_certificate_ce = register_class_OpenSSLCertificate();
672678
php_openssl_certificate_ce->create_object = php_openssl_certificate_create_object;
673679
php_openssl_certificate_ce->default_object_handlers = &php_openssl_certificate_object_handlers;

ext/openssl/openssl.stub.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,9 @@
409409
*/
410410
const OPENSSL_ENCODING_PEM = UNKNOWN;
411411

412+
class OpenSSLException extends Exception
413+
{
414+
}
412415

413416
/**
414417
* @strict-properties

ext/openssl/openssl_arginfo.h

Lines changed: 11 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
--TEST--
2+
TLS session resumption - server with cache disabled
3+
--EXTENSIONS--
4+
openssl
5+
--SKIPIF--
6+
<?php
7+
if (!function_exists("proc_open")) die("skip no proc_open");
8+
?>
9+
--FILE--
10+
<?php
11+
12+
try {
13+
OpenSSLSession::import('invalid');
14+
} catch (OpenSSLException $e) {
15+
echo $e->getMessage() . "\n";
16+
}
17+
?>
18+
--CLEAN--
19+
<?php
20+
@unlink(__DIR__ . DIRECTORY_SEPARATOR . 'session_cache_disabled.pem.tmp');
21+
?>
22+
--EXPECT--
23+
Failed to import session data

0 commit comments

Comments
 (0)