summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStanislav Malyshev <stas@php.net>2016-07-17 16:43:27 -0700
committerStanislav Malyshev <stas@php.net>2016-07-17 16:43:27 -0700
commite4d55878ddde387584e965b7ca98a7dd2b415ea0 (patch)
tree2874d2d847e40de268b39fa16e266fb74d997465
parent3810e7b362e7bdef00ad33ae683a49aa7ab19e0d (diff)
parent9d3b729803d381552086bdc7028d5cf857f5a01c (diff)
downloadphp-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--NEWS4
-rw-r--r--ext/pdo_pgsql/pgsql_statement.c3
-rw-r--r--ext/pdo_pgsql/tests/bug72570.phpt28
3 files changed, 35 insertions, 0 deletions
diff --git a/NEWS b/NEWS
index 62fa3e444e..80bb9528b8 100644
--- a/NEWS
+++ b/NEWS
@@ -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)