Skip to content

Commit 0109805

Browse files
author
Max Schaefer
committed
JavaScript: Use new API in NoSQL models.
1 parent 8277d5c commit 0109805

File tree

2 files changed

+8
-55
lines changed

2 files changed

+8
-55
lines changed

javascript/ql/src/semmle/javascript/ApiGraphs.qll

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -312,9 +312,6 @@ module API {
312312

313313
/** Gets a data-flow node that defines this entry point. */
314314
abstract DataFlow::Node getARhs();
315-
316-
/** Gets an API-graph node for this entry point. */
317-
API::Node getNode() { result = root().getASuccessor(this) }
318315
}
319316

320317
/**

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

Lines changed: 8 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -48,20 +48,6 @@ private module MongoDB {
4848
not result.getAnImmediateUse().(DataFlow::ParameterNode).getName() = "client" // mongodb v3 provides a `Mongoclient` here
4949
}
5050

51-
/**
52-
* A collection based on the type `mongodb.Collection`.
53-
*
54-
* Note that this also covers `mongoose` models since they are subtypes
55-
* of `mongodb.Collection`.
56-
*/
57-
private class TypedMongoCollection extends API::EntryPoint {
58-
TypedMongoCollection() { this = "TypedMongoCollection" }
59-
60-
override DataFlow::SourceNode getAUse() { result.hasUnderlyingType("mongodb", "Collection") }
61-
62-
override DataFlow::Node getARhs() { none() }
63-
}
64-
6551
/** Gets a data flow node referring to a MongoDB collection. */
6652
private API::Node getACollection() {
6753
// A collection resulting from calling `Db.collection(...)`.
@@ -71,7 +57,8 @@ private module MongoDB {
7157
result = collection.getParameter(1).getParameter(0)
7258
)
7359
or
74-
result = any(TypedMongoCollection c).getNode()
60+
// note that this also covers `mongoose` models since they are subtypes of `mongodb.Collection`
61+
result = API::Node::ofType("mongodb", "Collection")
7562
}
7663

7764
/** A call to a MongoDB query method. */
@@ -225,17 +212,6 @@ private module Mongoose {
225212
}
226213
}
227214

228-
/**
229-
* A Mongoose collection based on the type `mongoose.Model`.
230-
*/
231-
private class TypedMongooseModel extends API::EntryPoint {
232-
TypedMongooseModel() { this = "TypedMongooseModel" }
233-
234-
override DataFlow::SourceNode getAUse() { result.hasUnderlyingType("mongoose", "Model") }
235-
236-
override DataFlow::Node getARhs() { none() }
237-
}
238-
239215
/**
240216
* Gets a API-graph node referring to a Mongoose Model object.
241217
*/
@@ -247,7 +223,7 @@ private module Mongoose {
247223
result = conn.getMember("models").getAMember()
248224
)
249225
or
250-
result = any(TypedMongooseModel c).getNode()
226+
result = API::Node::ofType("mongoose", "Model")
251227
}
252228

253229
/**
@@ -341,24 +317,13 @@ private module Mongoose {
341317
override API::Node getQueryArgument() { result = this.getParameter(2) }
342318
}
343319

344-
/**
345-
* A Mongoose query.
346-
*/
347-
private class TypedMongooseQuery extends API::EntryPoint {
348-
TypedMongooseQuery() { this = "TypedMongooseQuery" }
349-
350-
override DataFlow::SourceNode getAUse() { result.hasUnderlyingType("mongoose", "Query") }
351-
352-
override DataFlow::Node getARhs() { none() }
353-
}
354-
355320
/**
356321
* Gets a data flow node referring to a Mongoose query object.
357322
*/
358323
API::Node getAMongooseQuery() {
359324
result = any(MongooseFunction f).getQueryReturn()
360325
or
361-
result = any(TypedMongooseQuery c).getNode()
326+
result = API::Node::ofType("mongoose", "Query")
362327
or
363328
result =
364329
getAMongooseQuery()
@@ -560,23 +525,14 @@ private module Mongoose {
560525
}
561526
}
562527

563-
/**
564-
* A Mongoose document.
565-
*/
566-
private class TypedMongooseDocument extends API::EntryPoint {
567-
TypedMongooseDocument() { this = "TypedMongooseDocument" }
568-
569-
override DataFlow::SourceNode getAUse() { result.hasUnderlyingType("mongoose", "Document") }
570-
571-
override DataFlow::Node getARhs() { none() }
572-
}
573-
574528
/**
575529
* Gets a data flow node referring to a Mongoose Document object.
576530
*/
577531
private API::Node getAMongooseDocument() {
578-
result instanceof RetrievedDocument or
579-
result = any(TypedMongooseDocument c).getNode() or
532+
result instanceof RetrievedDocument
533+
or
534+
result = API::Node::ofType("mongoose", "Document")
535+
or
580536
result =
581537
getAMongooseDocument()
582538
.getMember(any(string name | MethodSignatures::returnsDocument(name)))

0 commit comments

Comments
 (0)