Skip to content

Commit 9e81393

Browse files
committed
Add ql docs CDSUtils
1 parent 9d02e7e commit 9e81393

File tree

1 file changed

+54
-0
lines changed
  • javascript/frameworks/cap/lib/advanced_security/javascript/frameworks/cap

1 file changed

+54
-0
lines changed

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

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,50 +8,89 @@ class CdsUtilsModuleAccess extends API::Node {
88
CdsUtilsModuleAccess() { exists(CdsFacade cds | this = cds.getMember("utils")) }
99
}
1010

11+
/**
12+
* CDS Utils:
13+
* `decodeURI`, `decodeURIComponent`, `local`
14+
*/
1115
class PathConverters extends DataFlow::CallNode {
1216
PathConverters() {
1317
exists(CdsUtilsModuleAccess utils |
1418
utils.getMember(["decodeURI", "decodeURIComponent", "local"]).getACall() = this
1519
)
1620
}
1721

22+
/**
23+
* Gets the arguments to these calls.
24+
*/
1825
DataFlow::Node getPath() { this.getAnArgument() = result }
1926
}
2027

28+
/**
29+
* CDS Utils:
30+
* `isdir`, `isfile`
31+
*/
2132
class PathPredicates extends DataFlow::CallNode {
2233
PathPredicates() {
2334
exists(CdsUtilsModuleAccess utils | utils.getMember(["isdir", "isfile"]).getACall() = this)
2435
}
2536

37+
/**
38+
* Gets the arguments to these calls.
39+
*/
2640
DataFlow::Node getPath() { this.getAnArgument() = result }
2741
}
2842

43+
/**
44+
* CDS Utils:
45+
* `find`, `stat`, `readdir`
46+
*/
2947
class DirectoryReaders extends DataFlow::CallNode {
3048
DirectoryReaders() {
3149
exists(CdsUtilsModuleAccess utils |
3250
utils.getMember(["find", "stat", "readdir"]).getACall() = this
3351
)
3452
}
3553

54+
/**
55+
* Gets the arguments to these calls.
56+
*/
3657
DataFlow::Node getPath() { this.getAnArgument() = result }
3758
}
3859

60+
/**
61+
* CDS Utils:
62+
* `mkdirp`, `rmdir`, `rimraf`, `rm`
63+
*/
3964
class DirectoryWriters extends DataFlow::CallNode {
4065
DirectoryWriters() {
4166
exists(CdsUtilsModuleAccess utils |
4267
utils.getMember(["mkdirp", "rmdir", "rimraf", "rm"]).getACall() = this
4368
)
4469
}
4570

71+
/**
72+
* Gets the arguments to these calls.
73+
*/
4674
DataFlow::Node getPath() { this.getAnArgument() = result }
4775
}
4876

77+
/**
78+
* CDS Utils:
79+
* `read`
80+
*/
4981
class FileReaders extends DataFlow::CallNode {
5082
FileReaders() { exists(CdsUtilsModuleAccess utils | utils.getMember(["read"]).getACall() = this) }
5183

84+
/**
85+
* Gets the 0th argument to these calls.
86+
*/
5287
DataFlow::Node getPath() { this.getArgument(0) = result }
5388
}
5489

90+
/**
91+
* CDS Utils:
92+
* `append`, `write`
93+
*/
5594
class FileWriters extends DataFlow::CallNode {
5695
FileWriters() {
5796
exists(CdsUtilsModuleAccess utils | utils.getMember(["append", "write"]).getACall() = this)
@@ -66,6 +105,9 @@ class FileWriters extends DataFlow::CallNode {
66105

67106
SourceNode fileReaderWriterUtils() { result = fileReaderWriterUtils(TypeTracker::end()) }
68107

108+
/**
109+
* Gets the arguments to these calls that represent data.
110+
*/
69111
DataFlow::Node getData() {
70112
this.getNumArgument() = 1 and
71113
this.getArgument(0) = result
@@ -74,6 +116,10 @@ class FileWriters extends DataFlow::CallNode {
74116
this.getArgument(1) = result
75117
}
76118

119+
/**
120+
* Gets the arguments to these calls that represent a path.
121+
* Includes arguments to chained calls `to`, where that argument also represents a path.
122+
*/
77123
DataFlow::Node getPath() {
78124
fileReaderWriterUtils().getAMemberCall("to").getAnArgument() = result
79125
or
@@ -82,6 +128,10 @@ class FileWriters extends DataFlow::CallNode {
82128
}
83129
}
84130

131+
/**
132+
* CDS Utils:
133+
* `copy`
134+
*/
85135
class FileReaderWriters extends DataFlow::CallNode {
86136
FileReaderWriters() {
87137
exists(CdsUtilsModuleAccess utils | utils.getMember(["copy"]).getACall() = this)
@@ -96,6 +146,10 @@ class FileReaderWriters extends DataFlow::CallNode {
96146

97147
SourceNode fileReaderWriterUtils() { result = fileReaderWriterUtils(TypeTracker::end()) }
98148

149+
/**
150+
* Gets the arguments to these calls that represent a path.
151+
* Includes arguments to chained calls `to`, where that argument also represents a path.
152+
*/
99153
DataFlow::Node getPath() {
100154
fileReaderWriterUtils().getAMemberCall("to").getArgument(_) = result
101155
or

0 commit comments

Comments
 (0)