Skip to content

Commit 4c41659

Browse files
authored
Merge pull request #109 from advanced-security/knewbury01/fn-cap-sources
Fix FN cap sources
2 parents 5f2d430 + 546b355 commit 4c41659

7 files changed

Lines changed: 61 additions & 0 deletions

File tree

javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap/RemoteFlowSources.qll

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,26 @@ class HandlerParameter extends ParameterNode, RemoteFlowSource {
2828
result = "Parameter of an event handler belonging to an exposed service"
2929
}
3030
}
31+
32+
/**
33+
* A service may be described only in a CDS file, but event handlers may still be registered in a format such as:
34+
* ```javascript
35+
* module.exports = srv => {
36+
* srv.before('CREATE', 'Media', req => { //service name is used to describe which to register this handler to
37+
* ```
38+
* parameters named `req` are captured in the above example.
39+
*/
40+
class ServiceinCDSHandlerParameter extends RemoteFlowSource {
41+
ServiceinCDSHandlerParameter() {
42+
exists(MethodCallNode m, CdlEntity service, string serviceName |
43+
service.getName().regexpReplaceAll(".*\\.", "") = serviceName and
44+
m.getArgument(1).toString().regexpReplaceAll("'", "") = serviceName and
45+
this = m.getArgument(2) and
46+
m.getMethodName() in ["on", "before", "after"]
47+
)
48+
}
49+
50+
override string getSourceType() {
51+
result = "Parameter of an event handler belonging to an exposed service defined in a cds file"
52+
}
53+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace sap.capire.test;
2+
3+
entity Test {
4+
5+
key id:Integer;
6+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
| remoteflowsource.js:6:34:9:5 | req => ... i\\n } |
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
const loki = require('lokijs')
2+
const db = new loki('DB')
3+
const testDB = db.addCollection('Test')
4+
5+
module.exports = srv => {
6+
srv.before('CREATE', 'Test', req => { //source
7+
const obj = testDB.insert({ test: '' })
8+
req.data.id = obj.$loki
9+
})
10+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import javascript
2+
import advanced_security.javascript.frameworks.cap.RemoteFlowSources
3+
4+
from RemoteFlowSource source
5+
select source

scripts/create-db-with-cds.sh

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
#!/bin/bash
22
# !!!!!!! Run it at javascript/frameworks/cap/test/queries/test/queries/ !!!!!!!
33

4+
#test if codeql is on the path
5+
if command -v codeql
6+
then
7+
48
# Remember current directory
59
TEST_DIR=$(pwd)
610

@@ -35,3 +39,7 @@ for dir in *; do
3539
done
3640

3741
echo "Done!"
42+
43+
else
44+
echo "Add CodeQL to PATH!"
45+
fi

scripts/create-db.sh

100644100755
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
#!/bin/bash
22
# !!!!!!! Run it at javascript/frameworks/ui5/test/queries/test/queries/ !!!!!!!
33

4+
#test if codeql is on the path
5+
if command -v codeql
6+
then
7+
48
# Remember current directory
59
TEST_DIR=$(pwd)
610

@@ -26,3 +30,7 @@ for dir in *; do
2630
done
2731

2832
echo "Done!"
33+
34+
else
35+
echo "Add CodeQL to PATH!"
36+
fi

0 commit comments

Comments
 (0)