@@ -17,6 +17,7 @@ private import semmle.python.frameworks.internal.InstanceTaintStepsHelper
1717// modeling split over multiple files to keep this file from becoming too big
1818private import semmle.python.frameworks.Stdlib.Urllib
1919private import semmle.python.frameworks.Stdlib.Urllib2
20+ private import semmle.python.frameworks.data.ModelsAsData
2021
2122/** Provides models for the Python standard library. */
2223module Stdlib {
@@ -298,7 +299,7 @@ module Stdlib {
298299 * policy, and the code is not in a polished enough state that we want to do so -- at
299300 * least not without having convincing use-cases for it :)
300301 */
301- private module StdlibPrivate {
302+ module StdlibPrivate {
302303 // ---------------------------------------------------------------------------
303304 // os
304305 // ---------------------------------------------------------------------------
@@ -2121,17 +2122,20 @@ private module StdlibPrivate {
21212122 // wsgiref.simple_server
21222123 // ---------------------------------------------------------------------------
21232124 /** Provides models for the `wsgiref.simple_server` module. */
2124- private module WsgirefSimpleServer {
2125+ module WsgirefSimpleServer {
2126+ API:: Node subclassRef ( ) {
2127+ result =
2128+ API:: moduleImport ( "wsgiref" )
2129+ .getMember ( "simple_server" )
2130+ .getMember ( "WSGIServer" )
2131+ .getASubclass * ( )
2132+ or
2133+ result =
2134+ ModelOutput:: getATypeNode ( "wsgiref.simple_server.WSGIServer~Subclass" ) .getASubclass * ( )
2135+ }
2136+
21252137 class WsgiServerSubclass extends Class , SelfRefMixin {
2126- WsgiServerSubclass ( ) {
2127- this .getParent ( ) =
2128- API:: moduleImport ( "wsgiref" )
2129- .getMember ( "simple_server" )
2130- .getMember ( "WSGIServer" )
2131- .getASubclass * ( )
2132- .asSource ( )
2133- .asExpr ( )
2134- }
2138+ WsgiServerSubclass ( ) { this .getParent ( ) = subclassRef ( ) .asSource ( ) .asExpr ( ) }
21352139 }
21362140
21372141 /**
@@ -2148,13 +2152,7 @@ private module StdlibPrivate {
21482152 exists ( DataFlow:: Node appArg , DataFlow:: CallCfgNode setAppCall |
21492153 (
21502154 setAppCall =
2151- API:: moduleImport ( "wsgiref" )
2152- .getMember ( "simple_server" )
2153- .getMember ( "WSGIServer" )
2154- .getASubclass * ( )
2155- .getReturn ( )
2156- .getMember ( "set_app" )
2157- .getACall ( )
2155+ WsgirefSimpleServer:: subclassRef ( ) .getReturn ( ) .getMember ( "set_app" ) .getACall ( )
21582156 or
21592157 setAppCall
21602158 .( DataFlow:: MethodCallNode )
0 commit comments