Files
mongo-php-driver/tests/manager/bug0851-001.phpt
Jeremy Mikola 120b270377 PHPC-851: Separate argument zvals before modification
This primarily fixes a bug introduced in 6d46d62577 for PHPC-359, since we convert tag sets from arrays to objects to ensure proper BSON serialization. Not only was the array mutation visible to calling contexts, but a crash could occur if the array was immutable due to OPcache.

For Manager's $driverOptions, a comment in 1060cb8ba4 for PHPC-433 indicated that we should have separated its zval due to possible modification, but the appropriate zend_parse_parameters() flag was never used.
2016-12-12 19:31:45 -05:00

56 lines
1000 B
PHP

--TEST--
PHPC-851: Manager constructor should not modify options argument
--FILE--
<?php
$options = [
'readPreference' => 'secondaryPreferred',
'readPreferenceTags' => [
['dc' => 'ny'],
[],
],
];
$manager = new MongoDB\Driver\Manager(null, $options);
var_dump($options);
/* Dump the Manager's ReadPreference to ensure that each element in the
* readPreferenceTags option was converted to an object. */
var_dump($manager->getReadPreference());
?>
===DONE===
<?php exit(0); ?>
--EXPECTF--
array(2) {
["readPreference"]=>
string(18) "secondaryPreferred"
["readPreferenceTags"]=>
array(2) {
[0]=>
array(1) {
["dc"]=>
string(2) "ny"
}
[1]=>
array(0) {
}
}
}
object(MongoDB\Driver\ReadPreference)#%d (%d) {
["mode"]=>
string(18) "secondaryPreferred"
["tags"]=>
array(2) {
[0]=>
object(stdClass)#%d (%d) {
["dc"]=>
string(2) "ny"
}
[1]=>
object(stdClass)#%d (%d) {
}
}
}
===DONE===