@@ -9,12 +9,12 @@ private import codeql.ruby.Concepts
99/**
1010 * Provides modeling for `libxml`, an XML library for Ruby.
1111 */
12- module Libxml {
12+ module LibXml {
1313 /**
1414 * Flow summary for `libxml`. Wraps a string, parsing it as an XML document.
1515 */
16- private class XMLSummary extends SummarizedCallable {
17- XMLSummary ( ) { this = "LibXML::XML" }
16+ private class XmlSummary extends SummarizedCallable {
17+ XmlSummary ( ) { this = "LibXML::XML" }
1818
1919 override MethodCall getACall ( ) { result = any ( LibXmlRubyXmlParserCall c ) .asExpr ( ) .getExpr ( ) }
2020
@@ -24,15 +24,35 @@ module Libxml {
2424 }
2525
2626 /** A call that parses XML. */
27- private class LibXmlRubyXmlParserCall extends DataFlow:: CallNode {
28- LibXmlRubyXmlParserCall ( ) {
27+ abstract private class LibXmlRubyXmlParserCall extends XmlParserCall:: Range , DataFlow:: CallNode {
28+ }
29+
30+ private class LibXmlRubyXmlParserCallString extends LibXmlRubyXmlParserCall {
31+ LibXmlRubyXmlParserCallString ( ) {
2932 this =
3033 [ API:: getTopLevelMember ( "LibXML" ) .getMember ( "XML" ) , API:: getTopLevelMember ( "XML" ) ]
3134 .getMember ( [ "Document" , "Parser" ] )
32- .getAMethodCall ( [ "file" , "io" , " string"] )
35+ .getAMethodCall ( [ "string" ] )
3336 }
3437
35- DataFlow:: Node getInput ( ) { result = this .getArgument ( 0 ) }
38+ override DataFlow:: Node getInput ( ) { result = this .getArgument ( 0 ) }
39+
40+ /** No option for parsing */
41+ override predicate externalEntitiesEnabled ( ) { none ( ) }
42+ }
43+
44+ private class LibXmlRubyXmlParserCallIoFile extends LibXmlRubyXmlParserCall {
45+ LibXmlRubyXmlParserCallIoFile ( ) {
46+ this =
47+ [ API:: getTopLevelMember ( "LibXML" ) .getMember ( "XML" ) , API:: getTopLevelMember ( "XML" ) ]
48+ .getMember ( [ "Document" , "Parser" ] )
49+ .getAMethodCall ( [ "file" , "io" ] )
50+ }
51+
52+ override DataFlow:: Node getInput ( ) { result = this .getArgument ( 0 ) }
53+
54+ /** No option for parsing */
55+ override predicate externalEntitiesEnabled ( ) { none ( ) }
3656 }
3757
3858 /** Execution of a XPath statement. */
0 commit comments