summaryrefslogtreecommitdiff
path: root/ext/pgsql/tests
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-04-10 12:18:57 +0200
committerNikita Popov <nikita.ppv@gmail.com>2019-04-10 12:18:57 +0200
commitc7a86a38a3f657ab81163ac794450fc7ada2ba3c (patch)
tree9c09ee675977102b894cea4d0465dc2e5a611d27 /ext/pgsql/tests
parentb55715d61a908f7732d5a2bb6b20a105f372014a (diff)
downloadphp-git-c7a86a38a3f657ab81163ac794450fc7ada2ba3c.tar.gz
Fix pgsql use after free trying to reuse closed connection
When a connection is closed, we also need to remove the hash entry from the regular_list, as it now points to freed memory. To do this store a reverse mapping from the connection to the hash string. It would be nicer to introduce a wrapping structure for the pgsql link resource that could store the hash (and notices), but that would require large changes to the extension, so I'm going for a more minimal fix here.
Diffstat (limited to 'ext/pgsql/tests')
-rw-r--r--ext/pgsql/tests/connect_after_close.phpt19
1 files changed, 19 insertions, 0 deletions
diff --git a/ext/pgsql/tests/connect_after_close.phpt b/ext/pgsql/tests/connect_after_close.phpt
new file mode 100644
index 0000000000..65f954570b
--- /dev/null
+++ b/ext/pgsql/tests/connect_after_close.phpt
@@ -0,0 +1,19 @@
+--TEST--
+Reopen connection after it was closed
+--SKIPIF--
+<?php include("skipif.inc"); ?>
+--FILE--
+<?php
+include('config.inc');
+
+/* Run me under valgrind */
+$db1 = pg_connect($conn_str);
+unset($db1);
+var_dump(pg_close());
+$db2 = pg_connect($conn_str);
+unset($db2);
+var_dump(pg_close());
+?>
+--EXPECT--
+bool(true)
+bool(true)