diff options
| author | Xinchen Hui <laruence@php.net> | 2013-11-05 11:09:08 +0800 |
|---|---|---|
| committer | Xinchen Hui <laruence@php.net> | 2013-11-05 11:09:08 +0800 |
| commit | 2a94494b7e87a93f34dad608139aceb970860166 (patch) | |
| tree | 33a96a0fa8f6f45839261dbb586773d431a3b904 | |
| parent | bf875e269a0df4f4274d0bda2c6504e0757330fc (diff) | |
| parent | 906d3ae0edb1c371f4ad73585ef25337f8e0ef97 (diff) | |
| download | php-git-2a94494b7e87a93f34dad608139aceb970860166.tar.gz | |
Merge branch 'PHP-5.5'
| -rw-r--r-- | ext/mysqlnd/mysqlnd.c | 3 | ||||
| -rw-r--r-- | ext/pdo/pdo_dbh.c | 4 | ||||
| -rw-r--r-- | ext/pdo_sqlite/tests/bug66033.phpt | 33 |
3 files changed, 36 insertions, 4 deletions
diff --git a/ext/mysqlnd/mysqlnd.c b/ext/mysqlnd/mysqlnd.c index b41e5424f5..c9e134f7a3 100644 --- a/ext/mysqlnd/mysqlnd.c +++ b/ext/mysqlnd/mysqlnd.c @@ -557,7 +557,7 @@ mysqlnd_run_authentication( if (!auth_plugin) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "The server requested authentication method unknown to the client [%s]", requested_protocol); - SET_CLIENT_ERROR(*conn->error_info, CR_NOT_IMPLEMENTED, UNKNOWN_SQLSTATE, "The server requested authentication method umknown to the client"); + SET_CLIENT_ERROR(*conn->error_info, CR_NOT_IMPLEMENTED, UNKNOWN_SQLSTATE, "The server requested authentication method unknown to the client"); goto end; } DBG_INF("plugin found"); @@ -2247,7 +2247,6 @@ MYSQLND_METHOD(mysqlnd_conn_data, change_user)(MYSQLND_CONN_DATA * const conn, } if (!db) { db = ""; - } /* XXX: passwords that have \0 inside work during auth, but in this case won't work with change user */ diff --git a/ext/pdo/pdo_dbh.c b/ext/pdo/pdo_dbh.c index ee74e85928..67c6c58ed9 100644 --- a/ext/pdo/pdo_dbh.c +++ b/ext/pdo/pdo_dbh.c @@ -460,7 +460,7 @@ static void pdo_stmt_construct(pdo_stmt_t *stmt, zval *object, zend_class_entry if (dbstmt_ce->constructor) { zend_fcall_info fci; zend_fcall_info_cache fcc; - zval *retval; + zval *retval = NULL; fci.size = sizeof(zend_fcall_info); fci.function_table = &dbstmt_ce->function_table; @@ -495,7 +495,7 @@ static void pdo_stmt_construct(pdo_stmt_t *stmt, zval *object, zend_class_entry zval_dtor(object); ZVAL_NULL(object); object = NULL; /* marks failure */ - } else { + } else if (retval) { zval_ptr_dtor(&retval); } diff --git a/ext/pdo_sqlite/tests/bug66033.phpt b/ext/pdo_sqlite/tests/bug66033.phpt new file mode 100644 index 0000000000..28da3b54bf --- /dev/null +++ b/ext/pdo_sqlite/tests/bug66033.phpt @@ -0,0 +1,33 @@ +--TEST-- +Bug #66033 (Segmentation Fault when constructor of PDO statement throws an exception) +--SKIPIF-- +<?php +if (!extension_loaded('pdo_sqlite')) print 'skip not loaded'; +?> +--FILE-- +<?php +class DBStatement extends PDOStatement { + public $dbh; + protected function __construct($dbh) { + $this->dbh = $dbh; + throw new Exception("Blah"); + } +} + +$pdo = new PDO('sqlite::memory:', null, null); +$pdo->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('DBStatement', + array($pdo))); +$pdo->exec("CREATE TABLE IF NOT EXISTS messages ( + id INTEGER PRIMARY KEY, + title TEXT, + message TEXT, + time INTEGER)"); + +try { + $pdoStatement = $pdo->query("select * from messages"); +} catch (Exception $e) { + var_dump($e->getMessage()); +} +?> +--EXPECTF-- +string(4) "Blah" |
