File tree Expand file tree Collapse file tree 2 files changed +90
-1
lines changed Expand file tree Collapse file tree 2 files changed +90
-1
lines changed Original file line number Diff line number Diff line change @@ -311,7 +311,10 @@ static PHP_METHOD(ReadPreference, __set_state)
311
311
HashTable * props ;
312
312
zval * array ;
313
313
314
- if (zend_parse_parameters (ZEND_NUM_ARGS (), "a" , & array ) == FAILURE ) {
314
+ /* Separate the zval, since we may end up modifying the "tags" element in
315
+ * php_phongo_read_preference_prep_tagsets(), which is called from
316
+ * php_phongo_readpreference_init_from_hash. */
317
+ if (zend_parse_parameters (ZEND_NUM_ARGS (), "a/" , & array ) == FAILURE ) {
315
318
RETURN_FALSE ;
316
319
}
317
320
Original file line number Diff line number Diff line change
1
+ --TEST--
2
+ PHPC-1698: php_phongo_read_preference_prep_tagsets may leak in convert_to_object
3
+ --FILE--
4
+ <?php
5
+
6
+ require_once __DIR__ . '/../utils/tools.php ' ;
7
+
8
+ $ args = ['mode ' => 'secondary ' , 'tags ' => [['dc ' => 'ny ' ]]];
9
+ var_dump (MongoDB \Driver \ReadPreference::__set_state ($ args ));
10
+ var_dump ($ args );
11
+
12
+ $ tagSets = [['dc ' => 'ny ' ]];
13
+ var_dump (new MongoDB \Driver \ReadPreference ('secondary ' , $ tagSets ));
14
+ var_dump ($ tagSets );
15
+
16
+ $ uriTagSets = [['dc ' => 'ny ' ]];
17
+ var_dump ((new MongoDB \Driver \Manager (null , ['readPreference ' => 'secondary ' , 'readPreferenceTags ' => $ uriTagSets ]))->getReadPreference ());
18
+ var_dump ($ uriTagSets );
19
+
20
+ ?>
21
+ ===DONE===
22
+ <?php exit (0 ); ?>
23
+ --EXPECTF--
24
+ object(MongoDB\Driver\ReadPreference)#%d (2) {
25
+ ["mode"]=>
26
+ string(9) "secondary"
27
+ ["tags"]=>
28
+ array(1) {
29
+ [0]=>
30
+ object(stdClass)#%d (1) {
31
+ ["dc"]=>
32
+ string(2) "ny"
33
+ }
34
+ }
35
+ }
36
+ array(2) {
37
+ ["mode"]=>
38
+ string(9) "secondary"
39
+ ["tags"]=>
40
+ array(1) {
41
+ [0]=>
42
+ object(stdClass)#%d (1) {
43
+ ["dc"]=>
44
+ string(2) "ny"
45
+ }
46
+ }
47
+ }
48
+ object(MongoDB\Driver\ReadPreference)#%d (2) {
49
+ ["mode"]=>
50
+ string(9) "secondary"
51
+ ["tags"]=>
52
+ array(1) {
53
+ [0]=>
54
+ object(stdClass)#%d (1) {
55
+ ["dc"]=>
56
+ string(2) "ny"
57
+ }
58
+ }
59
+ }
60
+ array(1) {
61
+ [0]=>
62
+ array(1) {
63
+ ["dc"]=>
64
+ string(2) "ny"
65
+ }
66
+ }
67
+ object(MongoDB\Driver\ReadPreference)#%d (2) {
68
+ ["mode"]=>
69
+ string(9) "secondary"
70
+ ["tags"]=>
71
+ array(1) {
72
+ [0]=>
73
+ object(stdClass)#%d (1) {
74
+ ["dc"]=>
75
+ string(2) "ny"
76
+ }
77
+ }
78
+ }
79
+ array(1) {
80
+ [0]=>
81
+ array(1) {
82
+ ["dc"]=>
83
+ string(2) "ny"
84
+ }
85
+ }
86
+ ===DONE===
You can’t perform that action at this time.
0 commit comments