Skip to content

Commit 6cc8e5a

Browse files
committed
Python: support psycopg
1 parent 8bb9e8a commit 6cc8e5a

2 files changed

Lines changed: 40 additions & 0 deletions

File tree

python/ql/src/semmle/python/Frameworks.qll

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@ private import semmle.python.frameworks.Flask
99
private import semmle.python.frameworks.Invoke
1010
private import semmle.python.frameworks.MySQLdb
1111
private import semmle.python.frameworks.MysqlConnectorPython
12+
private import semmle.python.frameworks.Psycopg
1213
private import semmle.python.frameworks.Stdlib
1314
private import semmle.python.frameworks.Yaml
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/**
2+
* Provides classes modeling security-relevant aspects of the `Psycopg` PyPI package.
3+
* See
4+
* - https://www.psycopg.org/docs/
5+
* - https://pypi.org/project/psycopg2/
6+
*/
7+
8+
private import python
9+
private import semmle.python.dataflow.new.DataFlow
10+
private import semmle.python.dataflow.new.RemoteFlowSources
11+
private import semmle.python.Concepts
12+
private import PEP249
13+
14+
/**
15+
* Provides models for the `Psycopg` PyPI package.
16+
* See
17+
* - https://www.psycopg.org/docs/
18+
* - https://pypi.org/project/psycopg2/
19+
*/
20+
module Psycopg {
21+
// ---------------------------------------------------------------------------
22+
// Psycopg
23+
// ---------------------------------------------------------------------------
24+
/** Gets a reference to the `Psycopg` module. */
25+
private DataFlow::Node modulePsycopg(DataFlow::TypeTracker t) {
26+
t.start() and
27+
result = DataFlow::importNode("psycopg2")
28+
or
29+
exists(DataFlow::TypeTracker t2 | result = modulePsycopg(t2).track(t2, t))
30+
}
31+
32+
/** Gets a reference to the `Psycopg` module. */
33+
DataFlow::Node modulePsycopg() { result = modulePsycopg(DataFlow::TypeTracker::end()) }
34+
35+
/** Psycopg implements PEP 249, providing ways to execute SQL statements against a database. */
36+
class Psycopg extends PEP249Module {
37+
Psycopg() { this = modulePsycopg() }
38+
}
39+
}

0 commit comments

Comments
 (0)