@@ -27,36 +27,45 @@ private class YamlParseStep extends AdditionalTaintStep {
2727 exists ( API:: Node yamlParserMethod |
2828 succ = yamlParserMethod .getReturn ( ) .asSource ( ) and
2929 (
30- yamlParserMethod = yamlNode ( ) .getMethod ( [ "parse" , "parse_stream" ] ) and
30+ yamlParserMethod = yamlLibrary ( ) .getMethod ( [ "parse" , "parse_stream" ] ) and
3131 pred =
3232 [ yamlParserMethod .getParameter ( 0 ) , yamlParserMethod .getKeywordParameter ( "yaml" ) ] .asSink ( )
3333 or
34- yamlParserMethod = yamlNode ( ) .getMethod ( "parse_file" ) and
34+ yamlParserMethod = yamlLibrary ( ) .getMethod ( "parse_file" ) and
3535 pred =
3636 [ yamlParserMethod .getParameter ( 0 ) , yamlParserMethod .getKeywordParameter ( "filename" ) ]
3737 .asSink ( )
3838 )
3939 )
4040 or
41- exists ( API:: Node parseSuccessors | parseSuccessors = yamlParseChildNodeAccess ( _ ) |
41+ exists ( API:: Node parseSuccessors | parseSuccessors = yamlNode ( ) |
4242 succ =
4343 [
4444 parseSuccessors .getMethod ( "to_ruby" ) .getReturn ( ) .asSource ( ) ,
4545 parseSuccessors .getMethod ( "to_ruby" ) .getReturn ( ) .getAnElement ( ) .asSource ( )
4646 ] and
4747 pred = parseSuccessors .asSource ( )
4848 )
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+ )
4958 }
5059}
5160
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 ( )
5463 or
55- result = yamlParseChildNodeAccess ( source ) .getMethod ( _) .getReturn ( )
64+ result = yamlNode ( ) .getMethod ( _) .getReturn ( )
5665 or
57- result = yamlParseChildNodeAccess ( source ) .getMethod ( _) .getBlock ( ) .getParameter ( _)
66+ result = yamlNode ( ) .getMethod ( _) .getBlock ( ) .getParameter ( _)
5867 or
59- result = yamlParseChildNodeAccess ( source ) .getAnElement ( )
68+ result = yamlNode ( ) .getAnElement ( )
6069}
6170
62- private API:: Node yamlNode ( ) { result = API:: getTopLevelMember ( [ "YAML" , "Psych" ] ) }
71+ API:: Node yamlLibrary ( ) { result = API:: getTopLevelMember ( [ "YAML" , "Psych" ] ) }
0 commit comments