5 changed files with 87 additions and 1 deletions
-
1NEWS
-
5ext/oci8/oci8_interface.c
-
2ext/oci8/oci8_statement.c
-
1ext/oci8/php_oci8_int.h
-
79ext/oci8/tests/bug38173.phpt
@ -0,0 +1,79 @@ |
|||
--TEST-- |
|||
Bug #38173 (Freeing nested cursors causes OCI8 to segfault) |
|||
--SKIPIF-- |
|||
<?php if (!extension_loaded('oci8')) die("skip no oci8 extension"); ?> |
|||
--FILE-- |
|||
<?php |
|||
|
|||
require dirname(__FILE__)."/connect.inc"; |
|||
|
|||
$create_1 = "CREATE TABLE t1 (id INTEGER)"; |
|||
$create_2 = "CREATE TABLE t2 (id INTEGER)"; |
|||
$drop_1 = "DROP TABLE t1"; |
|||
$drop_2 = "DROP TABLE t2"; |
|||
|
|||
$s1 = oci_parse($c, $drop_1); |
|||
$s2 = oci_parse($c, $drop_2); |
|||
@oci_execute($s1); |
|||
@oci_execute($s2); |
|||
|
|||
$s1 = oci_parse($c, $create_1); |
|||
$s2 = oci_parse($c, $create_2); |
|||
oci_execute($s1); |
|||
oci_execute($s2); |
|||
|
|||
for($i=0; $i < 5; $i++) { |
|||
$insert = "INSERT INTO t1 VALUES(".$i.")"; |
|||
$s = oci_parse($c, $insert); |
|||
oci_execute($s); |
|||
} |
|||
|
|||
for($i=0; $i < 5; $i++) { |
|||
$insert = "INSERT INTO t2 VALUES(".$i.")"; |
|||
$s = oci_parse($c, $insert); |
|||
oci_execute($s); |
|||
} |
|||
|
|||
$query =" |
|||
SELECT |
|||
t1.*, |
|||
CURSOR( SELECT * FROM t2 ) as cursor |
|||
FROM |
|||
t1 |
|||
"; |
|||
|
|||
$sth = oci_parse($c, $query); |
|||
oci_execute($sth); |
|||
|
|||
// dies on oci_free_statement on 2nd pass through loop |
|||
while ( $row = oci_fetch_assoc($sth) ) { |
|||
print "Got row!\n"; |
|||
var_dump(oci_execute($row['CURSOR'])); |
|||
var_dump(oci_free_statement($row['CURSOR'])); |
|||
} |
|||
|
|||
$s1 = oci_parse($c, $drop_1); |
|||
$s2 = oci_parse($c, $drop_2); |
|||
@oci_execute($s1); |
|||
@oci_execute($s2); |
|||
|
|||
echo "Done\n"; |
|||
|
|||
?> |
|||
--EXPECT-- |
|||
Got row! |
|||
bool(true) |
|||
bool(true) |
|||
Got row! |
|||
bool(true) |
|||
bool(true) |
|||
Got row! |
|||
bool(true) |
|||
bool(true) |
|||
Got row! |
|||
bool(true) |
|||
bool(true) |
|||
Got row! |
|||
bool(true) |
|||
bool(true) |
|||
Done |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue