File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ ## 3.1.4-wip
2+
3+ * Fix a stack overflow in ` deepHashCode ` when handling self-referential lists.
4+
15## 3.1.3
26
37* Require Dart 3.4
Original file line number Diff line number Diff line change @@ -113,7 +113,8 @@ int deepHashCode(Object? obj) {
113113 return equality.hash (value.keys.map (deepHashCodeInner)) ^
114114 equality.hash (value.values.map (deepHashCodeInner));
115115 } else if (value is Iterable ) {
116- return const IterableEquality <Object ?>().hash (value.map (deepHashCode));
116+ return const IterableEquality <Object ?>()
117+ .hash (value.map (deepHashCodeInner));
117118 } else if (value is YamlScalar ) {
118119 return (value.value as Object ? ).hashCode;
119120 } else {
Original file line number Diff line number Diff line change 11name : yaml
2- version : 3.1.3
2+ version : 3.1.4-wip
33description : A parser for YAML, a human-friendly data serialization standard
44repository : https://github.com/dart-lang/tools/tree/main/pkgs/yaml
55issue_tracker : https://github.com/dart-lang/tools/labels/package%3Ayaml
Original file line number Diff line number Diff line change @@ -1118,6 +1118,21 @@ void main() {
11181118 expect (anchorList, same (aliasList));
11191119 });
11201120
1121+ test ('self-referential list does not cause stack overflow in deepHashCode' ,
1122+ () {
1123+ var doc = loadYaml (cleanUpLiteral ('''
1124+ ? &anchor [*anchor]
1125+ : value''' ));
1126+ expect (doc, isNotNull);
1127+ var key = doc.keys.first;
1128+ expect (key, isA <YamlList >());
1129+ expect (key[0 ], same (key));
1130+
1131+ var map = deepEqualsMap ();
1132+ map[key] = 'value' ;
1133+ expect (map[key], 'value' );
1134+ });
1135+
11211136 test ('[Example 7.1]' , () {
11221137 expectYamlLoads ({
11231138 'First occurrence' : 'Foo' ,
You can’t perform that action at this time.
0 commit comments