summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph M. Becker <cmbecker69@gmx.de>2020-09-28 22:59:51 +0200
committerChristoph M. Becker <cmbecker69@gmx.de>2020-09-28 22:59:51 +0200
commit99b3631e9a5e64b81d304b87dcec25320b90bbe4 (patch)
tree4c8b0c4c2bbeb61fb45327164b6cac23e5f49f09
parentf722512c4ad02cb0696ea8ea776aef5a709dcdbb (diff)
parentf1d8395c773854c5d8a2a39241750e636e95d92c (diff)
downloadphp-git-99b3631e9a5e64b81d304b87dcec25320b90bbe4.tar.gz
Merge branch 'PHP-7.4' into master
* PHP-7.4: Fix #67465: NULL Pointer dereference in odbc_handle_preparer
-rw-r--r--ext/pdo_odbc/odbc_driver.c3
-rw-r--r--ext/pdo_odbc/tests/bug67465.phpt17
2 files changed, 19 insertions, 1 deletions
diff --git a/ext/pdo_odbc/odbc_driver.c b/ext/pdo_odbc/odbc_driver.c
index 5631da7a36..9a254553d5 100644
--- a/ext/pdo_odbc/odbc_driver.c
+++ b/ext/pdo_odbc/odbc_driver.c
@@ -177,6 +177,8 @@ static int odbc_handle_preparer(pdo_dbh_t *dbh, const char *sql, size_t sql_len,
return 0;
}
+ stmt->driver_data = S;
+
cursor_type = pdo_attr_lval(driver_options, PDO_ATTR_CURSOR, PDO_CURSOR_FWDONLY);
if (cursor_type != PDO_CURSOR_FWDONLY) {
rc = SQLSetStmtAttr(S->stmt, SQL_ATTR_CURSOR_SCROLLABLE, (void*)SQL_SCROLLABLE, 0);
@@ -195,7 +197,6 @@ static int odbc_handle_preparer(pdo_dbh_t *dbh, const char *sql, size_t sql_len,
efree(nsql);
}
- stmt->driver_data = S;
stmt->methods = &odbc_stmt_methods;
if (rc != SQL_SUCCESS) {
diff --git a/ext/pdo_odbc/tests/bug67465.phpt b/ext/pdo_odbc/tests/bug67465.phpt
new file mode 100644
index 0000000000..872ca45c50
--- /dev/null
+++ b/ext/pdo_odbc/tests/bug67465.phpt
@@ -0,0 +1,17 @@
+--TEST--
+Bug #67465 (NULL Pointer dereference in odbc_handle_preparer)
+--SKIPIF--
+<?php
+if (!extension_loaded('pdo_odbc')) die('skip pdo_odbc extension not available');
+require 'ext/pdo/tests/pdo_test.inc';
+PDOTest::skip();
+?>
+--FILE--
+<?php
+require 'ext/pdo/tests/pdo_test.inc';
+$db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt');
+$db->prepare("SELECT 1", [PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL]);
+echo "done\n";
+?>
+--EXPECT--
+done