diff options
author | Stanislav Malyshev <stas@php.net> | 2016-07-17 16:43:27 -0700 |
---|---|---|
committer | Stanislav Malyshev <stas@php.net> | 2016-07-17 16:43:27 -0700 |
commit | e4d55878ddde387584e965b7ca98a7dd2b415ea0 (patch) | |
tree | 2874d2d847e40de268b39fa16e266fb74d997465 | |
parent | 3810e7b362e7bdef00ad33ae683a49aa7ab19e0d (diff) | |
parent | 9d3b729803d381552086bdc7028d5cf857f5a01c (diff) | |
download | php-git-e4d55878ddde387584e965b7ca98a7dd2b415ea0.tar.gz |
Merge branch 'PHP-7.0.9' of git.php.net:php-src into PHP-7.0.9
* 'PHP-7.0.9' of git.php.net:php-src:
update NEWS
Fixed bug #72570 Segmentation fault when binding parameters on a query without placeholders
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | ext/pdo_pgsql/pgsql_statement.c | 3 | ||||
-rw-r--r-- | ext/pdo_pgsql/tests/bug72570.phpt | 28 |
3 files changed, 35 insertions, 0 deletions
@@ -23,6 +23,10 @@ PHP NEWS oob read access). (Laruence) . Fixed bug #72399 (Use-After-Free in MBString (search_re)). (Laruence) +- PDO_pgsql: + . Fixed bug #72570 (Segmentation fault when binding parameters on a query + without placeholders). (Matteo) + - PCRE: . Fixed bug #72476 (Memleak in jit_stack). (Laruence) . Fixed bug #72463 (mail fails with invalid argument). (Anatol) diff --git a/ext/pdo_pgsql/pgsql_statement.c b/ext/pdo_pgsql/pgsql_statement.c index ee06cfc439..c32a81a87a 100644 --- a/ext/pdo_pgsql/pgsql_statement.c +++ b/ext/pdo_pgsql/pgsql_statement.c @@ -292,6 +292,9 @@ static int pgsql_stmt_param_hook(pdo_stmt_t *stmt, struct pdo_bound_param_data * break; case PDO_PARAM_EVT_ALLOC: + if (!stmt->bound_param_map) { + return 1; + } if (!zend_hash_index_exists(stmt->bound_param_map, param->paramno)) { pdo_raise_impl_error(stmt->dbh, stmt, "HY093", "parameter was not defined"); return 0; diff --git a/ext/pdo_pgsql/tests/bug72570.phpt b/ext/pdo_pgsql/tests/bug72570.phpt new file mode 100644 index 0000000000..e52efd93bb --- /dev/null +++ b/ext/pdo_pgsql/tests/bug72570.phpt @@ -0,0 +1,28 @@ +--TEST-- +PDO PgSQL Bug #72570 (Segmentation fault when binding parameters on a query without placeholders) +--SKIPIF-- +<?php +if (!extension_loaded('pdo') || !extension_loaded('pdo_pgsql')) die('skip not loaded'); +require dirname(__FILE__) . '/config.inc'; +require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc'; +PDOTest::skip(); +?> +--FILE-- +<?php +require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc'; +$db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt'); +$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + +$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); + +$stmt = $db->prepare("SELECT 1"); + +try { + var_dump($stmt->execute([1])); +} catch (PDOException $e) { + var_dump($e->getCode()); +} + +?> +--EXPECT-- +bool(false) |