mirror of
https://github.com/macintoshplus/mongo-php-driver.git
synced 2026-03-26 09:52:07 +01:00
This primarily fixes a bug introduced in6d46d62577for 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 in1060cb8ba4for PHPC-433 indicated that we should have separated its zval due to possible modification, but the appropriate zend_parse_parameters() flag was never used.
56 lines
1000 B
PHP
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===
|