Skip to content

Commit f9ea162

Browse files
committed
Address review feedback RemoteFlowSources types
add more testcases for all entity spec scenarios add extra ability to know name in one case for ServiceinCDSHandlerParameterWithName
1 parent 71cabdd commit f9ea162

File tree

6 files changed

+42
-6
lines changed

6 files changed

+42
-6
lines changed

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,11 @@ class ServiceinCDSHandlerParameterWithName extends ParameterNode, RemoteFlowSour
5959
ServiceinCDSHandlerParameterWithName() {
6060
exists(MethodCallNode m, CdlEntity entity, string entityName |
6161
entity.getName().regexpReplaceAll(".*\\.", "") = entityName and
62-
m.getArgument(1).asExpr().getStringValue().regexpReplaceAll("'", "") = entityName and
62+
(
63+
m.getArgument(1).asExpr().getStringValue().regexpReplaceAll("'", "") = entityName
64+
or
65+
m.getArgument(1).asExpr().(ArrayExpr).getAnElement().toString() = entityName
66+
) and
6367
this = m.getArgument(m.getNumArgument() - 1).(FunctionNode).getParameter(0) and
6468
m.getMethodName() in ["on", "before", "after"]
6569
)

javascript/frameworks/cap/test/models/cds/remoteflowsources/db/schema.cds

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,8 @@ entity Entity1 {
88
entity Entity2 {
99
Attribute3 : String(100);
1010
Attribute4 : String(100)
11+
}
12+
13+
entity Entity4 {
14+
Attribute4 : String(100)
1115
}

javascript/frameworks/cap/test/models/cds/remoteflowsources/remoteflowsource.expected

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,8 @@
55
| srv/service3nocds.js:11:28:11:30 | req |
66
| srv/service3nocds.js:12:26:12:28 | req |
77
| srv/service3nocds.js:19:34:19:36 | req |
8-
| srv/service3nocds.js:23:33:23:35 | req |
8+
| srv/service4withcds.js:5:38:5:40 | req |
9+
| srv/service4withcds.js:6:43:6:45 | req |
10+
| srv/service4withcds.js:14:33:14:35 | req |
11+
| srv/service4withcds.js:15:38:15:40 | req |
12+
| srv/service4withcds.js:16:23:16:25 | req |

javascript/frameworks/cap/test/models/cds/remoteflowsources/srv/service3nocds.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,4 @@ module.exports = BooksService
1717

1818
cds.serve('./test-service').with((srv) => {
1919
srv.before('READ', 'Books', (req) => req.reply([])) //req
20-
})
21-
22-
cds.serve('./test-service').with((srv) => {
23-
srv.before('READ', 'Test', (req) => req.reply([])) //req
2420
})
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using { advanced_security.log_injection.sample_entities as db_schema } from '../db/schema';
2+
3+
service Service4 @(path: '/service-4') {
4+
/* Entity to send READ/GET about. */
5+
entity Service4Entity as projection on db_schema.Entity4 excluding { Attribute4 }
6+
7+
/* API to talk to other services. */
8+
action send4 (
9+
messageToPass: String
10+
) returns String;
11+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
const cds = require("@sap/cds");
2+
3+
class TestService extends cds.ApplicationService {
4+
init() {
5+
this.before('READ', 'Test', (req) => req.reply([])) //req
6+
this.after('READ', this.entities, req => req.target.data) //req
7+
return super.init()
8+
}
9+
}
10+
module.exports = TestService
11+
12+
cds.serve('./test-service').with((srv) => {
13+
const { Test, Service4 } = this.entities
14+
srv.before('READ', 'Test', (req) => req.reply([])) //req
15+
srv.on('READ', [Test, Service4], req => req.target.data) //req
16+
srv.after('READ', req => req.target.data) //req
17+
})

0 commit comments

Comments
 (0)