]> granicus.if.org Git - php/commitdiff
php_pdo_register_driver() might fail
authorGeorge Peter Banyard <girgias@php.net>
Tue, 19 Jan 2021 12:54:42 +0000 (12:54 +0000)
committerGeorge Peter Banyard <girgias@php.net>
Tue, 19 Jan 2021 12:55:07 +0000 (12:55 +0000)
Therefore correctly report failure in MINIT for the drivers which didn't.

ext/pdo/pdo.c
ext/pdo/php_pdo_driver.h
ext/pdo_firebird/pdo_firebird.c
ext/pdo_oci/pdo_oci.c
ext/pdo_pgsql/pdo_pgsql.c

index 573de78cff0065326ea706d35a027dc929f0b77d..b5eb35e84117c4db36f063b731b380a5dc70fe90 100644 (file)
@@ -115,7 +115,7 @@ zend_module_entry pdo_module_entry = {
 ZEND_GET_MODULE(pdo)
 #endif
 
-PDO_API int php_pdo_register_driver(const pdo_driver_t *driver) /* {{{ */
+PDO_API zend_result php_pdo_register_driver(const pdo_driver_t *driver) /* {{{ */
 {
        if (driver->api_version != PDO_DRIVER_API) {
                zend_error(E_ERROR, "PDO: driver %s requires PDO API version " ZEND_ULONG_FMT "; this is PDO version %d",
index 775ffd240f946faa1dd7e271aea3a875b4de9a57..ed5518a01700f8864a77a59adb7fce9301870ee3 100644 (file)
@@ -655,8 +655,9 @@ struct _pdo_row_t {
        pdo_stmt_t *stmt;
 };
 
-/* call this in MINIT to register your PDO driver */
-PDO_API int php_pdo_register_driver(const pdo_driver_t *driver);
+/* Call this in MINIT to register the PDO driver.
+ * Registering the driver might fail and should be reported accordingly in MINIT. */
+PDO_API zend_result php_pdo_register_driver(const pdo_driver_t *driver);
 /* call this in MSHUTDOWN to unregister your PDO driver */
 PDO_API void php_pdo_unregister_driver(const pdo_driver_t *driver);
 
index 086b7cab5feadd5750dc7a82f7489ae9c2d3f8db..29b8bc85a77ec603406b5f5bc45e9501c8314ac9 100644 (file)
@@ -58,7 +58,9 @@ PHP_MINIT_FUNCTION(pdo_firebird) /* {{{ */
        REGISTER_PDO_CLASS_CONST_LONG("FB_ATTR_TIME_FORMAT", (zend_long) PDO_FB_ATTR_TIME_FORMAT);
        REGISTER_PDO_CLASS_CONST_LONG("FB_ATTR_TIMESTAMP_FORMAT", (zend_long) PDO_FB_ATTR_TIMESTAMP_FORMAT);
 
-       php_pdo_register_driver(&pdo_firebird_driver);
+       if (FAILURE == php_pdo_register_driver(&pdo_firebird_driver)) {
+               return FAILURE;
+       }
 
 #ifdef ZEND_SIGNALS
        /* firebird replaces some signals at runtime, suppress warnings. */
index efa7c1caf652c014529b537db9a2c912f048cb10..5ae28a50df8d943a69dda50990574817e13a6613 100644 (file)
@@ -87,7 +87,9 @@ PHP_MINIT_FUNCTION(pdo_oci)
        REGISTER_PDO_CLASS_CONST_LONG("OCI_ATTR_MODULE", (zend_long)PDO_OCI_ATTR_MODULE);
        REGISTER_PDO_CLASS_CONST_LONG("OCI_ATTR_CALL_TIMEOUT", (zend_long)PDO_OCI_ATTR_CALL_TIMEOUT);
 
-       php_pdo_register_driver(&pdo_oci_driver);
+       if (FAILURE == php_pdo_register_driver(&pdo_oci_driver)) {
+               return FAILURE;
+       }
 
        // Defer OCI init to PHP_RINIT_FUNCTION because with php-fpm,
        // NLS_LANG is not yet available here.
index 4764419e47dbeb6e2b03b1a00624fb271e36a335..9c711a883e0e39c30ea4b62d48c6126bd4f4edd2 100644 (file)
@@ -65,8 +65,7 @@ PHP_MINIT_FUNCTION(pdo_pgsql)
        REGISTER_PDO_CLASS_CONST_LONG("PGSQL_TRANSACTION_INERROR", (zend_long)PGSQL_TRANSACTION_INERROR);
        REGISTER_PDO_CLASS_CONST_LONG("PGSQL_TRANSACTION_UNKNOWN", (zend_long)PGSQL_TRANSACTION_UNKNOWN);
 
-       php_pdo_register_driver(&pdo_pgsql_driver);
-       return SUCCESS;
+       return php_pdo_register_driver(&pdo_pgsql_driver);
 }
 /* }}} */