Skip to content

Commit 242f7e1

Browse files
committed
update pg :)
1 parent 18edef6 commit 242f7e1

File tree

4 files changed

+31
-2
lines changed

4 files changed

+31
-2
lines changed

javascript/ql/lib/semmle/javascript/frameworks/SQL.qll

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ private module Postgres {
104104
API::Node clientOrPool() { result = API::Node::ofType("pg", ["Client", "PoolClient", "Pool"]) }
105105

106106
/** A call to the Postgres `query` method. */
107-
private class QueryCall extends DatabaseAccess, DataFlow::MethodCallNode {
107+
private class QueryCall extends DatabaseAccess, API::CallNode {
108108
QueryCall() { this = clientOrPool().getMember(["execute", "query"]).getACall() }
109109

110110
override DataFlow::Node getAResult() {
@@ -117,15 +117,22 @@ private module Postgres {
117117
PromiseFlow::loadStep(this.getALocalUse(), result, Promises::valueProp())
118118
}
119119

120-
override DataFlow::Node getAQueryArgument() { result = this.getArgument(0) }
120+
override DataFlow::Node getAQueryArgument() {
121+
result = this.getArgument(0) or result = this.getParameter(0).getMember("text").asSink()
122+
}
121123
}
122124

125+
/** Gets a Postgres Query member. */
126+
API::Node query() { result = API::moduleImport("pg").getMember("Query") }
127+
123128
/** An expression that is passed to the `query` method and hence interpreted as SQL. */
124129
class QueryString extends SQL::SqlString {
125130
QueryString() {
126131
this = any(QueryCall qc).getAQueryArgument()
127132
or
128133
this = API::moduleImport("pg-cursor").getParameter(0).asSink()
134+
or
135+
this = query().getParameter(0).asSink()
129136
}
130137
}
131138

javascript/ql/test/library-tests/frameworks/SQL/Credentials.expected

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
| postgres2.js:12:13:12:20 | 'secret' | password |
2121
| postgres4.js:4:9:4:16 | 'dbuser' | user name |
2222
| postgres4.js:7:13:7:28 | 'secretpassword' | password |
23+
| postgres6.js:8:11:8:20 | 'postgres' | user name |
2324
| sequelize2.js:4:45:9:1 | {\\n dia ... word'\\n} | user name |
2425
| sequelize2.js:7:13:7:22 | 'username' | user name |
2526
| sequelize2.js:8:13:8:22 | 'password' | password |

javascript/ql/test/library-tests/frameworks/SQL/SqlString.expected

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@
3838
| postgres2.js:46:26:46:46 | 'SELECT ... users' |
3939
| postgres3.js:15:16:15:40 | 'SELECT ... s name' |
4040
| postgres5.js:8:21:8:25 | query |
41+
| postgres6.js:13:11:13:44 | 'SELECT ... E id=6' |
42+
| postgres6.js:16:20:16:27 | queryObj |
43+
| postgres6.js:18:11:18:44 | 'SELECT ... E id=7' |
4144
| postgres-types.ts:4:18:4:29 | 'SELECT 123' |
4245
| postgresImport.js:4:18:4:43 | 'SELECT ... number' |
4346
| sequelize2.js:10:17:10:118 | 'SELECT ... Y name' |
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import pkg from 'pg';
2+
3+
const { Query, Client } = pkg;
4+
const client = new Client({
5+
host: '127.0.0.1',
6+
port: 5432,
7+
database: 'testsqli',
8+
user: 'postgres'
9+
})
10+
11+
const queryObj = {
12+
name: 'get-name',
13+
text: 'SELECT * FROM "user" WHERE id=6'
14+
}
15+
16+
await client.query(queryObj) // Already Implemented
17+
18+
new Query('SELECT * FROM "user" WHERE id=7')

0 commit comments

Comments
 (0)