Skip to content

Commit 3e9849b

Browse files
committed
JS: Type track sequelize model
1 parent a536069 commit 3e9849b

File tree

4 files changed

+20
-2
lines changed

4 files changed

+20
-2
lines changed

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

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -311,10 +311,22 @@ private module MsSql {
311311
*/
312312
private module Sequelize {
313313
/** Gets an import of the `sequelize` module. */
314-
DataFlow::ModuleImportNode sequelize() { result.getPath() = "sequelize" }
314+
DataFlow::SourceNode sequelize() { result = DataFlow::moduleImport("sequelize") }
315315

316316
/** Gets an expression that creates an instance of the `Sequelize` class. */
317-
DataFlow::SourceNode newSequelize() { result = sequelize().getAnInstantiation() }
317+
private DataFlow::SourceNode newSequelize(DataFlow::TypeTracker t) {
318+
t.start() and
319+
result = sequelize().getAnInstantiation()
320+
or
321+
exists(DataFlow::TypeTracker t2 |
322+
result = newSequelize(t2).track(t2, t)
323+
)
324+
}
325+
326+
/** Gets an expression that creates an instance of the `Sequelize` class. */
327+
DataFlow::SourceNode newSequelize() {
328+
result = newSequelize(DataFlow::TypeTracker::end())
329+
}
318330

319331
/** A call to `Sequelize.query`. */
320332
private class QueryCall extends DatabaseAccess, DataFlow::ValueNode {

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
| postgres5.js:8:21:8:25 | query |
1616
| sequelize2.js:10:17:10:118 | 'SELECT ... Y name' |
1717
| sequelize.js:8:17:8:118 | 'SELECT ... Y name' |
18+
| sequelizeImport.js:3:17:3:118 | 'SELECT ... Y name' |
1819
| spanner2.js:5:26:5:35 | "SQL code" |
1920
| spanner2.js:7:35:7:44 | "SQL code" |
2021
| spanner.js:6:8:6:17 | "SQL code" |

javascript/ql/test/library-tests/frameworks/SQL/sequelize.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,5 @@ const sequelize = new Sequelize('database', 'username', 'password', {
77
});
88
sequelize.query('SELECT * FROM Products WHERE (name LIKE \'%' + criteria + '%\') AND deletedAt IS NULL) ORDER BY name');
99

10+
11+
exports.sequelize = sequelize;
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
const { sequelize } = require("./sequelize");
2+
3+
sequelize.query('SELECT * FROM Products WHERE (name LIKE \'%' + criteria + '%\') AND deletedAt IS NULL) ORDER BY name');

0 commit comments

Comments
 (0)