diff options
author | Stanislav Malyshev <stas@php.net> | 2015-03-22 16:47:54 -0700 |
---|---|---|
committer | Stanislav Malyshev <stas@php.net> | 2015-03-22 16:47:54 -0700 |
commit | 574b9a4e609d862bc5f384ffcbbc1bcbe95b936b (patch) | |
tree | 3439bae392893078bb6e33fac70c8575506a6513 /ext/sqlite3 | |
parent | 65bd5957898ba6b2e9094a0d833ddc2d8531951e (diff) | |
parent | 40037f1474fcd1317cfcc13412cd0a3a588e3896 (diff) | |
download | php-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.phpt | 36 |
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 + |