Skip to content

Commit 116a827

Browse files
committed
PHPC-732: Regression test for use-after-free with Cursor wrapped in generator
1 parent bdcbc8c commit 116a827

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

tests/cursor/bug0732-001.phpt

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
--TEST--
2+
PHPC-732: Possible mongoc_client_t use-after-free with Cursor wrapped in generator
3+
--SKIPIF--
4+
<?php if (PHP_VERSION_ID < 50500) exit("skip PHP 5.5 is required for generators"); ?>
5+
<?php require __DIR__ . "/../utils/basic-skipif.inc"; CLEANUP(STANDALONE) ?>
6+
--FILE--
7+
<?php
8+
require_once __DIR__ . "/../utils/basic.inc";
9+
10+
function wrapCursor(MongoDB\Driver\Cursor $cursor)
11+
{
12+
foreach ($cursor as $key => $value) {
13+
yield $key => $value;
14+
}
15+
}
16+
17+
$manager = new MongoDB\Driver\Manager(STANDALONE);
18+
19+
$bulk = new MongoDB\Driver\BulkWrite();
20+
$bulk->insert(['_id' => 1]);
21+
$bulk->insert(['_id' => 2]);
22+
$bulk->insert(['_id' => 3]);
23+
$manager->executeBulkWrite(NS, $bulk);
24+
25+
$cursor = $manager->executeQuery(NS, new MongoDB\Driver\Query([], ['batchSize' => 2]));
26+
$generator = wrapCursor($cursor);
27+
28+
foreach ($generator as $value) {
29+
echo "Exiting during first iteration on generator\n";
30+
exit(0);
31+
}
32+
33+
?>
34+
===DONE===
35+
<?php exit(0); ?>
36+
--EXPECT--
37+
Exiting during first iteration on generator

0 commit comments

Comments
 (0)