@@ -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
6367zend_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 */
669673PHP_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 ;
0 commit comments