summaryrefslogtreecommitdiff
path: root/ext/sqlite3
diff options
context:
space:
mode:
authorStanislav Malyshev <stas@php.net>2015-03-22 16:47:54 -0700
committerStanislav Malyshev <stas@php.net>2015-03-22 16:47:54 -0700
commit574b9a4e609d862bc5f384ffcbbc1bcbe95b936b (patch)
tree3439bae392893078bb6e33fac70c8575506a6513 /ext/sqlite3
parent65bd5957898ba6b2e9094a0d833ddc2d8531951e (diff)
parent40037f1474fcd1317cfcc13412cd0a3a588e3896 (diff)
downloadphp-git-574b9a4e609d862bc5f384ffcbbc1bcbe95b936b.tar.gz
Merge branch 'PHP-5.6'
* PHP-5.6: Fix #68760: Fix freeing null segfault. Added test for behaviour. Fix #68760: 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.phpt36
1 files changed, 36 insertions, 0 deletions
diff --git a/ext/sqlite3/tests/bug68760.phpt b/ext/sqlite3/tests/bug68760.phpt
new file mode 100644
index 0000000000..de89a2cf22
--- /dev/null
+++ b/ext/sqlite3/tests/bug68760.phpt
@@ -0,0 +1,36 @@
+--TEST--
+Bug #68760 (Callback throws exception behaviour. Segfault in 5.6)
+--SKIPIF--
+<?php
+if (!extension_loaded('sqlite3')) die('skip');
+?>
+--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
+