summaryrefslogtreecommitdiff
path: root/ext/sqlite3
diff options
context:
space:
mode:
authorDanack <Danack@basereality.com>2015-02-16 02:22:15 +0000
committerDanack <Danack@basereality.com>2015-02-16 02:22:15 +0000
commit94e2002de5dc275533922f1753b9a9e666fee404 (patch)
treebb52a3ffbea687eb549fdf059ff31a840b13642a /ext/sqlite3
parent91859f15a8f940ea3a85d66c664eada9c37e6b45 (diff)
parent92e11f22c50fa7121add4ee6515d078f6968763f (diff)
downloadphp-git-94e2002de5dc275533922f1753b9a9e666fee404.tar.gz
Merge branch 'sqlite3_exceptionSegfault56' into sqlite3_exception7
* sqlite3_exceptionSegfault56: Fix freeing null segfault. Added test for behaviour. Conflicts: ext/sqlite3/sqlite3.c
Diffstat (limited to 'ext/sqlite3')
-rw-r--r--ext/sqlite3/tests/bug68760.phpt32
1 files changed, 32 insertions, 0 deletions
diff --git a/ext/sqlite3/tests/bug68760.phpt b/ext/sqlite3/tests/bug68760.phpt
new file mode 100644
index 0000000000..5eb7d848bd
--- /dev/null
+++ b/ext/sqlite3/tests/bug68760.phpt
@@ -0,0 +1,32 @@
+--TEST--
+Bug #68760 (Callback throws exception behaviour. Segfault in 5.6)
+--FILE--
+<?php
+function oopsFunction($a, $b) {
+ echo "callback";
+ throw new \Exception("oops");
+}
+
+$db = new SQLite3(":memory:");
+$db->exec("CREATE TABLE test (col1 string)");
+$db->exec("INSERT INTO test VALUES ('a1')");
+$db->exec("INSERT INTO test VALUES ('a10')");
+$db->exec("INSERT INTO test VALUES ('a2')");
+
+try {
+ $db->createCollation('NATURAL_CMP', 'oopsFunction');
+ $naturalSort = $db->query("SELECT col1 FROM test ORDER BY col1 COLLATE NATURAL_CMP");
+ while ($row = $naturalSort->fetchArray()) {
+ echo $row['col1'], "\n";
+ }
+ $db->close();
+}
+catch(\Exception $e) {
+ echo "Exception: ".$e->getMessage();
+}
+?>
+--EXPECTF--
+callback
+Warning: SQLite3::query(): An error occurred while invoking the compare callback in %a/bug68760.php on line %i
+Exception: oops
+