[PECL-CVS] [pecl-file_formats-yaml] php7: Validate merge key values revisited
[email protected] (Bryan Davis) Mon, 29 Jun 2026 01:49:15 +0000
| Newsgroups | php.pecl.cvs |
|---|---|
| Message-ID | <[email protected]> |
Author: Bryan Davis (bd808)
Date: 2026-06-28T19:49:13-06:00
Commit: https://github.com/php/pecl-file_formats-yaml/commit/688b2d629ba6b86322869ce93e1621abea6f57f7
Raw diff: https://github.com/php/pecl-file_formats-yaml/commit/688b2d629ba6b86322869ce93e1621abea6f57f7.diff
Validate merge key values revisited
Ensure that aliases used in merge key mappings reference arrays.
Bug: 74886
Changed paths:
M parse.c
M tests/bug_74886.phpt
Diff:
diff --git a/parse.c b/parse.c
index c504cb3..1b08134 100644
--- a/parse.c
+++ b/parse.c
@@ -431,6 +431,8 @@ void handle_mapping(parser_state_t *state, zval *retval)
ZEND_HASH_FOREACH_VAL(HASH_OF(valptr), zvalp) {
if (Z_ISREF_P(zvalp)) {
ZVAL_DEREF(zvalp);
+ }
+ if (Z_TYPE_P(zvalp) == IS_ARRAY) {
zend_hash_merge(
Z_ARRVAL_P(arrval), Z_ARRVAL_P(zvalp),
zval_add_ref, 0);
diff --git a/tests/bug_74886.phpt b/tests/bug_74886.phpt
index 0adc1a3..937129a 100644
--- a/tests/bug_74886.phpt
+++ b/tests/bug_74886.phpt
@@ -12,13 +12,25 @@ var_dump(yaml_parse('
<< : [ 0x7FFFFFFF ]
- # scalar in sequence len 2
<< : [ *REF, 0x7FFFFFFF ]
+
+- &SCALAR_REF some-string
+- # scalar ref
+ << : *SCALAR_REF
+- # scalar ref in sequence len 1
+ << : [ *SCALAR_REF ]
+- # scalar ref in sequence len 2
+ << : [ *REF, *SCALAR_REF ]
'));
?>
--EXPECTF--
Warning: yaml_parse(): expected a mapping for merging, but found scalar (line 6, column 22) in %sbug_74886.php on line 2
Warning: yaml_parse(): expected a mapping for merging, but found scalar (line 8, column 28) in %sbug_74886.php on line 2
-array(4) {
+
+Warning: yaml_parse(): expected a mapping for merging, but found scalar (line 14, column 23) in %sbug_74886.php on line 2
+
+Warning: yaml_parse(): expected a mapping for merging, but found scalar (line 16, column 29) in %sbug_74886.php on line 2
+array(8) {
[0]=>
array(1) {
["x"]=>
@@ -37,4 +49,19 @@ array(4) {
["x"]=>
int(1)
}
+ [4]=>
+ &string(11) "some-string"
+ [5]=>
+ array(1) {
+ ["<<"]=>
+ &string(11) "some-string"
+ }
+ [6]=>
+ array(0) {
+ }
+ [7]=>
+ array(1) {
+ ["x"]=>
+ int(1)
+ }
}