]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-7.4'
authorNikita Popov <nikita.ppv@gmail.com>
Tue, 11 Aug 2020 15:13:32 +0000 (17:13 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Tue, 11 Aug 2020 15:16:38 +0000 (17:16 +0200)
* PHP-7.4:
  Fix #64705 errorInfo property of PDOException is null when PDO::__construct() fails

1  2 
ext/pdo/pdo_dbh.c
ext/pdo/php_pdo_driver.h
ext/pdo_mysql/mysql_driver.c
ext/pdo_pgsql/pgsql_driver.c
ext/pdo_sqlite/sqlite_driver.c

index 8d536bed60abeb34e55be7977e3770723cc7690f,1396816fe903b4c614d018e8cac1eb96ccd7a082..7f4df3f9ae3be76fcda28418188261920bf22efe
  
  static int pdo_dbh_attribute_set(pdo_dbh_t *dbh, zend_long attr, zval *value);
  
 -              zend_update_property(php_pdo_get_exception(), &pdo_exception, "errorInfo", sizeof("errorInfo")-1, &error_info);
 -              zend_update_property_long(php_pdo_get_exception(), &pdo_exception, "code", sizeof("code")-1, driver_errcode);
+ void pdo_throw_exception(unsigned int driver_errcode, char *driver_errmsg, pdo_error_type *pdo_error)
+ {
+               zval error_info,pdo_exception;
+               char *pdo_exception_message;
+               object_init_ex(&pdo_exception, php_pdo_get_exception());
+               array_init(&error_info);
+               add_next_index_string(&error_info, *pdo_error);
+               add_next_index_long(&error_info, driver_errcode);
+               add_next_index_string(&error_info, driver_errmsg);
+               spprintf(&pdo_exception_message, 0,"SQLSTATE[%s] [%d] %s",*pdo_error, driver_errcode, driver_errmsg);
 -                      &pdo_exception,
++              zend_update_property(php_pdo_get_exception(), Z_OBJ(pdo_exception), "errorInfo", sizeof("errorInfo")-1, &error_info);
++              zend_update_property_long(php_pdo_get_exception(), Z_OBJ(pdo_exception), "code", sizeof("code")-1, driver_errcode);
+               zend_update_property_string(
+                       php_pdo_get_exception(),
++                      Z_OBJ(pdo_exception),
+                       "message",
+                       sizeof("message")-1,
+                       pdo_exception_message
+               );
+               efree(pdo_exception_message);
+               zval_ptr_dtor(&error_info);
+               zend_throw_exception_object(&pdo_exception);
+ }
  void pdo_raise_impl_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, const char *sqlstate, const char *supp) /* {{{ */
  {
        pdo_error_type *pdo_err = &dbh->error_code;
Simple merge
Simple merge
Simple merge
Simple merge