mirror of
https://github.com/github/codeql.git
synced 2026-04-29 02:35:15 +02:00
Python: Model stdin thread-model
This commit is contained in:
@@ -12,6 +12,9 @@ extensions:
|
||||
- ['sys', 'Member[argv]', 'commandargs']
|
||||
- ['sys', 'Member[orig_argv]', 'commandargs']
|
||||
|
||||
- ['sys', 'Member[stdin]', 'stdin']
|
||||
- ['builtins', 'Member[input].ReturnValue', 'stdin']
|
||||
|
||||
# if no argument is given, the default is to use sys.argv[1:]
|
||||
- ['argparse.ArgumentParser', 'Member[parse_args,parse_known_args].WithArity[0].ReturnValue', 'commandargs']
|
||||
- addsTo:
|
||||
@@ -20,5 +23,3 @@ extensions:
|
||||
data:
|
||||
- ['argparse.ArgumentParser', 'Member[parse_args,parse_known_args]', 'Argument[0,args:]', 'ReturnValue', 'taint']
|
||||
# note: taint of attribute lookups is handled in QL
|
||||
|
||||
# TODO: input / read from stdin
|
||||
|
||||
@@ -5009,6 +5009,19 @@ module StdlibPrivate {
|
||||
nodeTo.(DataFlow::AttrRead).getObject() = nodeFrom
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// sys
|
||||
// ---------------------------------------------------------------------------
|
||||
/**
|
||||
* An access of `sys.stdin`/`sys.stdout`/`sys.stderr`, to get additional FileLike
|
||||
* modeling.
|
||||
*/
|
||||
private class SysStandardStreams extends Stdlib::FileLikeObject::InstanceSource, DataFlow::Node {
|
||||
SysStandardStreams() {
|
||||
this = API::moduleImport("sys").getMember(["stdin", "stdout", "stderr"]).asSource()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
@@ -44,8 +44,8 @@ ensure_not_tainted(fake_args.foo) # $ SPURIOUS: tainted
|
||||
########################################
|
||||
|
||||
ensure_tainted(
|
||||
sys.stdin.readline(), # $ MISSING: tainted threatModelSource
|
||||
input(), # $ MISSING: tainted threatModelSource
|
||||
sys.stdin.readline(), # $ tainted threatModelSource[stdin]=sys.stdin
|
||||
input(), # $ tainted threatModelSource[stdin]=input()
|
||||
)
|
||||
|
||||
########################################
|
||||
|
||||
Reference in New Issue
Block a user