@@ -725,21 +725,27 @@ private class CreatedSafeXMLReaderFlowConfig extends DataFlow3::Configuration {
725725}
726726
727727/** An `XMLReader` that is obtained from a safe source. */
728- class CreatedSafeXMLReader extends MethodAccess {
728+ class CreatedSafeXMLReader extends Call {
729729 CreatedSafeXMLReader ( ) {
730730 //Obtained from SAXParser
731731 exists ( SafeSAXParserFlowConfig safeParser |
732- this .getMethod ( ) .getDeclaringType ( ) instanceof SAXParser and
733- this .getMethod ( ) .hasName ( "getXMLReader" ) and
732+ this .( MethodAccess ) . getMethod ( ) .getDeclaringType ( ) instanceof SAXParser and
733+ this .( MethodAccess ) . getMethod ( ) .hasName ( "getXMLReader" ) and
734734 safeParser .hasFlowToExpr ( this .getQualifier ( ) )
735735 )
736736 or
737737 //Obtained from SAXReader
738738 exists ( SafeSAXReaderFlowConfig safeReader |
739- this .getMethod ( ) .getDeclaringType ( ) instanceof SAXReader and
740- this .getMethod ( ) .hasName ( "getXMLReader" ) and
739+ this .( MethodAccess ) . getMethod ( ) .getDeclaringType ( ) instanceof SAXReader and
740+ this .( MethodAccess ) . getMethod ( ) .hasName ( "getXMLReader" ) and
741741 safeReader .hasFlowToExpr ( this .getQualifier ( ) )
742742 )
743+ or
744+ exists ( RefType secureReader , string package |
745+ this .( ClassInstanceExpr ) .getConstructedType ( ) = secureReader and
746+ secureReader .hasQualifiedName ( package , "SecureJDKXercesXMLReader" ) and
747+ package .matches ( "com.google.%common.xml.parsing" )
748+ )
743749 }
744750
745751 predicate flowsTo ( SafeXMLReaderFlowSink sink ) {
0 commit comments