@@ -27,36 +27,45 @@ private class YamlParseStep extends AdditionalTaintStep {
27
27
exists ( API:: Node yamlParserMethod |
28
28
succ = yamlParserMethod .getReturn ( ) .asSource ( ) and
29
29
(
30
- yamlParserMethod = yamlNode ( ) .getMethod ( [ "parse" , "parse_stream" ] ) and
30
+ yamlParserMethod = yamlLibrary ( ) .getMethod ( [ "parse" , "parse_stream" ] ) and
31
31
pred =
32
32
[ yamlParserMethod .getParameter ( 0 ) , yamlParserMethod .getKeywordParameter ( "yaml" ) ] .asSink ( )
33
33
or
34
- yamlParserMethod = yamlNode ( ) .getMethod ( "parse_file" ) and
34
+ yamlParserMethod = yamlLibrary ( ) .getMethod ( "parse_file" ) and
35
35
pred =
36
36
[ yamlParserMethod .getParameter ( 0 ) , yamlParserMethod .getKeywordParameter ( "filename" ) ]
37
37
.asSink ( )
38
38
)
39
39
)
40
40
or
41
- exists ( API:: Node parseSuccessors | parseSuccessors = yamlParseChildNodeAccess ( _ ) |
41
+ exists ( API:: Node parseSuccessors | parseSuccessors = yamlNode ( ) |
42
42
succ =
43
43
[
44
44
parseSuccessors .getMethod ( "to_ruby" ) .getReturn ( ) .asSource ( ) ,
45
45
parseSuccessors .getMethod ( "to_ruby" ) .getReturn ( ) .getAnElement ( ) .asSource ( )
46
46
] and
47
47
pred = parseSuccessors .asSource ( )
48
48
)
49
+ or
50
+ exists ( API:: Node parseSuccessors | parseSuccessors = yamlNode ( ) |
51
+ succ =
52
+ [
53
+ parseSuccessors .getMethod ( _) .getBlock ( ) .getParameter ( _) .asSource ( ) ,
54
+ parseSuccessors .getMethod ( _) .getReturn ( ) .asSource ( )
55
+ ] and
56
+ pred = parseSuccessors .asSource ( )
57
+ )
49
58
}
50
59
}
51
60
52
- API:: Node yamlParseChildNodeAccess ( API :: Node source ) {
53
- source = yamlNode ( ) .getMethod ( [ "parse" , "parse_stream" ] ) .getReturn ( ) and source = result
61
+ API:: Node yamlNode ( ) {
62
+ result = yamlLibrary ( ) .getMethod ( [ "parse" , "parse_stream" , "parse_file" ] ) .getReturn ( )
54
63
or
55
- result = yamlParseChildNodeAccess ( source ) .getMethod ( _) .getReturn ( )
64
+ result = yamlNode ( ) .getMethod ( _) .getReturn ( )
56
65
or
57
- result = yamlParseChildNodeAccess ( source ) .getMethod ( _) .getBlock ( ) .getParameter ( _)
66
+ result = yamlNode ( ) .getMethod ( _) .getBlock ( ) .getParameter ( _)
58
67
or
59
- result = yamlParseChildNodeAccess ( source ) .getAnElement ( )
68
+ result = yamlNode ( ) .getAnElement ( )
60
69
}
61
70
62
- private API:: Node yamlNode ( ) { result = API:: getTopLevelMember ( [ "YAML" , "Psych" ] ) }
71
+ API:: Node yamlLibrary ( ) { result = API:: getTopLevelMember ( [ "YAML" , "Psych" ] ) }
0 commit comments