circle-ir 4.17.0 → 4.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (280) hide show
  1. package/dist/analysis/advisories.d.ts +186 -0
  2. package/dist/analysis/advisories.d.ts.map +1 -0
  3. package/dist/analysis/advisories.js +391 -0
  4. package/dist/analysis/advisories.js.map +1 -0
  5. package/dist/analysis/comment-lines.d.ts +14 -0
  6. package/dist/analysis/comment-lines.d.ts.map +1 -0
  7. package/dist/analysis/comment-lines.js +34 -0
  8. package/dist/analysis/comment-lines.js.map +1 -0
  9. package/dist/analysis/config-loader.d.ts.map +1 -1
  10. package/dist/analysis/config-loader.js +59 -5
  11. package/dist/analysis/config-loader.js.map +1 -1
  12. package/dist/analysis/constant-caller-gate.d.ts +2 -2
  13. package/dist/analysis/constant-caller-gate.d.ts.map +1 -1
  14. package/dist/analysis/constant-caller-gate.js +205 -29
  15. package/dist/analysis/constant-caller-gate.js.map +1 -1
  16. package/dist/analysis/constant-propagation/propagator.d.ts +4 -0
  17. package/dist/analysis/constant-propagation/propagator.d.ts.map +1 -1
  18. package/dist/analysis/constant-propagation/propagator.js +99 -0
  19. package/dist/analysis/constant-propagation/propagator.js.map +1 -1
  20. package/dist/analysis/entry-point-detection.d.ts.map +1 -1
  21. package/dist/analysis/entry-point-detection.js +72 -0
  22. package/dist/analysis/entry-point-detection.js.map +1 -1
  23. package/dist/analysis/interprocedural.d.ts.map +1 -1
  24. package/dist/analysis/interprocedural.js +75 -8
  25. package/dist/analysis/interprocedural.js.map +1 -1
  26. package/dist/analysis/maven-declared.d.ts +72 -0
  27. package/dist/analysis/maven-declared.d.ts.map +1 -0
  28. package/dist/analysis/maven-declared.js +216 -0
  29. package/dist/analysis/maven-declared.js.map +1 -0
  30. package/dist/analysis/maven-version.d.ts +28 -0
  31. package/dist/analysis/maven-version.d.ts.map +1 -0
  32. package/dist/analysis/maven-version.js +172 -0
  33. package/dist/analysis/maven-version.js.map +1 -0
  34. package/dist/analysis/passes/constant-propagation-pass.d.ts.map +1 -1
  35. package/dist/analysis/passes/constant-propagation-pass.js +29 -1
  36. package/dist/analysis/passes/constant-propagation-pass.js.map +1 -1
  37. package/dist/analysis/passes/cross-file-pass.d.ts.map +1 -1
  38. package/dist/analysis/passes/cross-file-pass.js +81 -1
  39. package/dist/analysis/passes/cross-file-pass.js.map +1 -1
  40. package/dist/analysis/passes/csharp-sanitizer-credit.d.ts +7 -0
  41. package/dist/analysis/passes/csharp-sanitizer-credit.d.ts.map +1 -1
  42. package/dist/analysis/passes/csharp-sanitizer-credit.js +44 -1
  43. package/dist/analysis/passes/csharp-sanitizer-credit.js.map +1 -1
  44. package/dist/analysis/passes/insecure-cookie-pass.d.ts +2 -0
  45. package/dist/analysis/passes/insecure-cookie-pass.d.ts.map +1 -1
  46. package/dist/analysis/passes/insecure-cookie-pass.js +25 -3
  47. package/dist/analysis/passes/insecure-cookie-pass.js.map +1 -1
  48. package/dist/analysis/passes/interprocedural-pass.d.ts +11 -14
  49. package/dist/analysis/passes/interprocedural-pass.d.ts.map +1 -1
  50. package/dist/analysis/passes/interprocedural-pass.js +562 -0
  51. package/dist/analysis/passes/interprocedural-pass.js.map +1 -1
  52. package/dist/analysis/passes/language-sources-pass.d.ts +18 -1
  53. package/dist/analysis/passes/language-sources-pass.d.ts.map +1 -1
  54. package/dist/analysis/passes/language-sources-pass.js +1057 -14
  55. package/dist/analysis/passes/language-sources-pass.js.map +1 -1
  56. package/dist/analysis/passes/param-source-flow-gate-pass.d.ts.map +1 -1
  57. package/dist/analysis/passes/param-source-flow-gate-pass.js +66 -3
  58. package/dist/analysis/passes/param-source-flow-gate-pass.js.map +1 -1
  59. package/dist/analysis/passes/sink-filter-pass.d.ts +44 -2
  60. package/dist/analysis/passes/sink-filter-pass.d.ts.map +1 -1
  61. package/dist/analysis/passes/sink-filter-pass.js +690 -12
  62. package/dist/analysis/passes/sink-filter-pass.js.map +1 -1
  63. package/dist/analysis/passes/taint-propagation-pass.d.ts.map +1 -1
  64. package/dist/analysis/passes/taint-propagation-pass.js +133 -10
  65. package/dist/analysis/passes/taint-propagation-pass.js.map +1 -1
  66. package/dist/analysis/passes/tls-verify-disabled-pass.d.ts +18 -0
  67. package/dist/analysis/passes/tls-verify-disabled-pass.d.ts.map +1 -1
  68. package/dist/analysis/passes/tls-verify-disabled-pass.js +161 -0
  69. package/dist/analysis/passes/tls-verify-disabled-pass.js.map +1 -1
  70. package/dist/analysis/passes/weak-random-pass.d.ts +6 -0
  71. package/dist/analysis/passes/weak-random-pass.d.ts.map +1 -1
  72. package/dist/analysis/passes/weak-random-pass.js +29 -0
  73. package/dist/analysis/passes/weak-random-pass.js.map +1 -1
  74. package/dist/analysis/promote-cross-file-flows.d.ts +17 -0
  75. package/dist/analysis/promote-cross-file-flows.d.ts.map +1 -0
  76. package/dist/analysis/promote-cross-file-flows.js +32 -0
  77. package/dist/analysis/promote-cross-file-flows.js.map +1 -0
  78. package/dist/analysis/sbom.d.ts +100 -0
  79. package/dist/analysis/sbom.d.ts.map +1 -1
  80. package/dist/analysis/sbom.js +514 -3
  81. package/dist/analysis/sbom.js.map +1 -1
  82. package/dist/analysis/semver-version.d.ts +30 -0
  83. package/dist/analysis/semver-version.d.ts.map +1 -0
  84. package/dist/analysis/semver-version.js +76 -0
  85. package/dist/analysis/semver-version.js.map +1 -0
  86. package/dist/analysis/taint-matcher.d.ts +5 -0
  87. package/dist/analysis/taint-matcher.d.ts.map +1 -1
  88. package/dist/analysis/taint-matcher.js +225 -4
  89. package/dist/analysis/taint-matcher.js.map +1 -1
  90. package/dist/analyzer.d.ts +57 -0
  91. package/dist/analyzer.d.ts.map +1 -1
  92. package/dist/analyzer.js +69 -6
  93. package/dist/analyzer.js.map +1 -1
  94. package/dist/browser/circle-ir.js +2936 -291
  95. package/dist/core/circle-ir-core.cjs +634 -203
  96. package/dist/core/circle-ir-core.js +634 -203
  97. package/dist/core/extractors/dfg.js +205 -2
  98. package/dist/core/extractors/dfg.js.map +1 -1
  99. package/dist/core/extractors/ts-declaration-detail.d.ts +39 -0
  100. package/dist/core/extractors/ts-declaration-detail.d.ts.map +1 -0
  101. package/dist/core/extractors/ts-declaration-detail.js +266 -0
  102. package/dist/core/extractors/ts-declaration-detail.js.map +1 -0
  103. package/dist/graph/analysis-pass.d.ts +4 -1
  104. package/dist/graph/analysis-pass.d.ts.map +1 -1
  105. package/dist/graph/analysis-pass.js +4 -1
  106. package/dist/graph/analysis-pass.js.map +1 -1
  107. package/dist/graph-facts/dead-code.d.ts +62 -0
  108. package/dist/graph-facts/dead-code.d.ts.map +1 -0
  109. package/dist/graph-facts/dead-code.js +90 -0
  110. package/dist/graph-facts/dead-code.js.map +1 -0
  111. package/dist/graph-facts/dependency-calls.d.ts +86 -0
  112. package/dist/graph-facts/dependency-calls.d.ts.map +1 -0
  113. package/dist/graph-facts/dependency-calls.js +93 -0
  114. package/dist/graph-facts/dependency-calls.js.map +1 -0
  115. package/dist/graph-facts/index.d.ts +10 -0
  116. package/dist/graph-facts/index.d.ts.map +1 -0
  117. package/dist/graph-facts/index.js +10 -0
  118. package/dist/graph-facts/index.js.map +1 -0
  119. package/dist/graph-facts/maven-packages.d.ts +42 -0
  120. package/dist/graph-facts/maven-packages.d.ts.map +1 -0
  121. package/dist/graph-facts/maven-packages.js +133 -0
  122. package/dist/graph-facts/maven-packages.js.map +1 -0
  123. package/dist/graph-facts/reach.d.ts +203 -0
  124. package/dist/graph-facts/reach.d.ts.map +1 -0
  125. package/dist/graph-facts/reach.js +219 -0
  126. package/dist/graph-facts/reach.js.map +1 -0
  127. package/dist/graph-facts/removal-reach.d.ts +73 -0
  128. package/dist/graph-facts/removal-reach.d.ts.map +1 -0
  129. package/dist/graph-facts/removal-reach.js +64 -0
  130. package/dist/graph-facts/removal-reach.js.map +1 -0
  131. package/dist/index.d.ts +21 -6
  132. package/dist/index.d.ts.map +1 -1
  133. package/dist/index.js +20 -3
  134. package/dist/index.js.map +1 -1
  135. package/dist/navigation/go-graph.d.ts +68 -0
  136. package/dist/navigation/go-graph.d.ts.map +1 -0
  137. package/dist/navigation/go-graph.js +753 -0
  138. package/dist/navigation/go-graph.js.map +1 -0
  139. package/dist/navigation/index.d.ts +7 -1
  140. package/dist/navigation/index.d.ts.map +1 -1
  141. package/dist/navigation/index.js +6 -0
  142. package/dist/navigation/index.js.map +1 -1
  143. package/dist/navigation/java-entry-tables.d.ts +43 -0
  144. package/dist/navigation/java-entry-tables.d.ts.map +1 -0
  145. package/dist/navigation/java-entry-tables.js +56 -0
  146. package/dist/navigation/java-entry-tables.js.map +1 -0
  147. package/dist/navigation/java-graph.d.ts +64 -0
  148. package/dist/navigation/java-graph.d.ts.map +1 -0
  149. package/dist/navigation/java-graph.js +466 -0
  150. package/dist/navigation/java-graph.js.map +1 -0
  151. package/dist/navigation/navigation-index.d.ts +51 -1
  152. package/dist/navigation/navigation-index.d.ts.map +1 -1
  153. package/dist/navigation/navigation-index.js +72 -0
  154. package/dist/navigation/navigation-index.js.map +1 -1
  155. package/dist/navigation/python-graph.d.ts +73 -0
  156. package/dist/navigation/python-graph.d.ts.map +1 -0
  157. package/dist/navigation/python-graph.js +867 -0
  158. package/dist/navigation/python-graph.js.map +1 -0
  159. package/dist/navigation/ts-call-edges.d.ts +193 -0
  160. package/dist/navigation/ts-call-edges.d.ts.map +1 -0
  161. package/dist/navigation/ts-call-edges.js +2089 -0
  162. package/dist/navigation/ts-call-edges.js.map +1 -0
  163. package/dist/navigation/ts-entry-tables.d.ts +88 -0
  164. package/dist/navigation/ts-entry-tables.d.ts.map +1 -0
  165. package/dist/navigation/ts-entry-tables.js +50 -0
  166. package/dist/navigation/ts-entry-tables.js.map +1 -0
  167. package/dist/path-set/branches.d.ts +52 -0
  168. package/dist/path-set/branches.d.ts.map +1 -0
  169. package/dist/path-set/branches.js +124 -0
  170. package/dist/path-set/branches.js.map +1 -0
  171. package/dist/path-set/finding-diff.d.ts +63 -0
  172. package/dist/path-set/finding-diff.d.ts.map +1 -0
  173. package/dist/path-set/finding-diff.js +150 -0
  174. package/dist/path-set/finding-diff.js.map +1 -0
  175. package/dist/path-set/index.d.ts +18 -0
  176. package/dist/path-set/index.d.ts.map +1 -0
  177. package/dist/path-set/index.js +12 -0
  178. package/dist/path-set/index.js.map +1 -0
  179. package/dist/path-set/line-diff.d.ts +19 -0
  180. package/dist/path-set/line-diff.d.ts.map +1 -0
  181. package/dist/path-set/line-diff.js +98 -0
  182. package/dist/path-set/line-diff.js.map +1 -0
  183. package/dist/path-set/path-set.d.ts +88 -0
  184. package/dist/path-set/path-set.d.ts.map +1 -0
  185. package/dist/path-set/path-set.js +716 -0
  186. package/dist/path-set/path-set.js.map +1 -0
  187. package/dist/path-set/templates.d.ts +42 -0
  188. package/dist/path-set/templates.d.ts.map +1 -0
  189. package/dist/path-set/templates.js +119 -0
  190. package/dist/path-set/templates.js.map +1 -0
  191. package/dist/path-set/types.d.ts +195 -0
  192. package/dist/path-set/types.d.ts.map +1 -0
  193. package/dist/path-set/types.js +8 -0
  194. package/dist/path-set/types.js.map +1 -0
  195. package/dist/remedy-class/index.d.ts +12 -0
  196. package/dist/remedy-class/index.d.ts.map +1 -0
  197. package/dist/remedy-class/index.js +9 -0
  198. package/dist/remedy-class/index.js.map +1 -0
  199. package/dist/remedy-class/match.d.ts +165 -0
  200. package/dist/remedy-class/match.d.ts.map +1 -0
  201. package/dist/remedy-class/match.js +705 -0
  202. package/dist/remedy-class/match.js.map +1 -0
  203. package/dist/remedy-class/output-context.d.ts +25 -0
  204. package/dist/remedy-class/output-context.d.ts.map +1 -0
  205. package/dist/remedy-class/output-context.js +150 -0
  206. package/dist/remedy-class/output-context.js.map +1 -0
  207. package/dist/remedy-class/sha256.d.ts +18 -0
  208. package/dist/remedy-class/sha256.d.ts.map +1 -0
  209. package/dist/remedy-class/sha256.js +89 -0
  210. package/dist/remedy-class/sha256.js.map +1 -0
  211. package/dist/remedy-class/table.d.ts +130 -0
  212. package/dist/remedy-class/table.d.ts.map +1 -0
  213. package/dist/remedy-class/table.js +457 -0
  214. package/dist/remedy-class/table.js.map +1 -0
  215. package/dist/resolution/cross-file.d.ts +9 -0
  216. package/dist/resolution/cross-file.d.ts.map +1 -1
  217. package/dist/resolution/cross-file.js +60 -5
  218. package/dist/resolution/cross-file.js.map +1 -1
  219. package/dist/stable-ids/builder.d.ts +20 -0
  220. package/dist/stable-ids/builder.d.ts.map +1 -0
  221. package/dist/stable-ids/builder.js +65 -0
  222. package/dist/stable-ids/builder.js.map +1 -0
  223. package/dist/stable-ids/diff.d.ts +18 -0
  224. package/dist/stable-ids/diff.d.ts.map +1 -0
  225. package/dist/stable-ids/diff.js +37 -0
  226. package/dist/stable-ids/diff.js.map +1 -0
  227. package/dist/stable-ids/go.d.ts +28 -0
  228. package/dist/stable-ids/go.d.ts.map +1 -0
  229. package/dist/stable-ids/go.js +160 -0
  230. package/dist/stable-ids/go.js.map +1 -0
  231. package/dist/stable-ids/hash.d.ts +22 -0
  232. package/dist/stable-ids/hash.d.ts.map +1 -0
  233. package/dist/stable-ids/hash.js +167 -0
  234. package/dist/stable-ids/hash.js.map +1 -0
  235. package/dist/stable-ids/index.d.ts +30 -0
  236. package/dist/stable-ids/index.d.ts.map +1 -0
  237. package/dist/stable-ids/index.js +59 -0
  238. package/dist/stable-ids/index.js.map +1 -0
  239. package/dist/stable-ids/java.d.ts +28 -0
  240. package/dist/stable-ids/java.d.ts.map +1 -0
  241. package/dist/stable-ids/java.js +224 -0
  242. package/dist/stable-ids/java.js.map +1 -0
  243. package/dist/stable-ids/moves.d.ts +87 -0
  244. package/dist/stable-ids/moves.d.ts.map +1 -0
  245. package/dist/stable-ids/moves.js +222 -0
  246. package/dist/stable-ids/moves.js.map +1 -0
  247. package/dist/stable-ids/nodes.d.ts +32 -0
  248. package/dist/stable-ids/nodes.d.ts.map +1 -0
  249. package/dist/stable-ids/nodes.js +92 -0
  250. package/dist/stable-ids/nodes.js.map +1 -0
  251. package/dist/stable-ids/normalize.d.ts +35 -0
  252. package/dist/stable-ids/normalize.d.ts.map +1 -0
  253. package/dist/stable-ids/normalize.js +174 -0
  254. package/dist/stable-ids/normalize.js.map +1 -0
  255. package/dist/stable-ids/parse-errors.d.ts +24 -0
  256. package/dist/stable-ids/parse-errors.d.ts.map +1 -0
  257. package/dist/stable-ids/parse-errors.js +46 -0
  258. package/dist/stable-ids/parse-errors.js.map +1 -0
  259. package/dist/stable-ids/python.d.ts +27 -0
  260. package/dist/stable-ids/python.d.ts.map +1 -0
  261. package/dist/stable-ids/python.js +212 -0
  262. package/dist/stable-ids/python.js.map +1 -0
  263. package/dist/stable-ids/ts-parse-errors.d.ts +27 -0
  264. package/dist/stable-ids/ts-parse-errors.d.ts.map +1 -0
  265. package/dist/stable-ids/ts-parse-errors.js +75 -0
  266. package/dist/stable-ids/ts-parse-errors.js.map +1 -0
  267. package/dist/stable-ids/types.d.ts +106 -0
  268. package/dist/stable-ids/types.d.ts.map +1 -0
  269. package/dist/stable-ids/types.js +16 -0
  270. package/dist/stable-ids/types.js.map +1 -0
  271. package/dist/stable-ids/typescript.d.ts +30 -0
  272. package/dist/stable-ids/typescript.d.ts.map +1 -0
  273. package/dist/stable-ids/typescript.js +362 -0
  274. package/dist/stable-ids/typescript.js.map +1 -0
  275. package/dist/types/config.d.ts +9 -0
  276. package/dist/types/config.d.ts.map +1 -1
  277. package/dist/types/index.d.ts +35 -0
  278. package/dist/types/index.d.ts.map +1 -1
  279. package/dist/types/index.js.map +1 -1
  280. package/package.json +3 -3
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Constant-caller gate (cognium-dev#636, C# slice).
2
+ * Constant-caller gate (cognium-dev#636 C#, cognium-dev#614 Java slice).
3
3
  *
4
4
  * Per-file analysis seeds every `string` parameter of a method as an
5
5
  * `interprocedural_param` source, so a sink that receives the parameter is
@@ -10,7 +10,7 @@
10
10
  * constant at that parameter.
11
11
  *
12
12
  * A flow is dropped only when ALL of these hold; otherwise nothing changes:
13
- * 1. C# file, flow seeded by `interprocedural_param` on parameter `P` of
13
+ * 1. C# or Java file, flow seeded by `interprocedural_param` on parameter `P` of
14
14
  * method `M`, and no other flow reaches the same sink from a real source.
15
15
  * 2. `M` is not virtual / abstract / override / an interface member, and no
16
16
  * project type derives from `M`'s type; the name is not overloaded in its type.
@@ -1 +1 @@
1
- {"version":3,"file":"constant-caller-gate.d.ts","sourceRoot":"","sources":["../../src/analysis/constant-caller-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAwB,MAAM,mBAAmB,CAAC;AAClF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AA8D9D,2HAA2H;AAC3H,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CA6DxG;AAWD,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEtG;AA4ED,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC,EACjE,YAAY,EAAE,YAAY,EAC1B,iBAAiB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAC/C,IAAI,CAiEN"}
1
+ {"version":3,"file":"constant-caller-gate.d.ts","sourceRoot":"","sources":["../../src/analysis/constant-caller-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAwB,MAAM,mBAAmB,CAAC;AAClF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAoE9D,2HAA2H;AAC3H,wBAAgB,mBAAmB,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CA6DxG;AAWD,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEtG;AAsFD,wBAAgB,uBAAuB,CACrC,YAAY,EAAE,aAAa,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC,EACjE,YAAY,EAAE,YAAY,EAC1B,iBAAiB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAC/C,IAAI,CAwFN"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Constant-caller gate (cognium-dev#636, C# slice).
2
+ * Constant-caller gate (cognium-dev#636 C#, cognium-dev#614 Java slice).
3
3
  *
4
4
  * Per-file analysis seeds every `string` parameter of a method as an
5
5
  * `interprocedural_param` source, so a sink that receives the parameter is
@@ -10,7 +10,7 @@
10
10
  * constant at that parameter.
11
11
  *
12
12
  * A flow is dropped only when ALL of these hold; otherwise nothing changes:
13
- * 1. C# file, flow seeded by `interprocedural_param` on parameter `P` of
13
+ * 1. C# or Java file, flow seeded by `interprocedural_param` on parameter `P` of
14
14
  * method `M`, and no other flow reaches the same sink from a real source.
15
15
  * 2. `M` is not virtual / abstract / override / an interface member, and no
16
16
  * project type derives from `M`'s type; the name is not overloaded in its type.
@@ -27,6 +27,7 @@
27
27
  * keeps the flow.
28
28
  */
29
29
  const STRING_LITERAL = /^@?"(?:[^"\\]|\\.)*"$/;
30
+ const GATE_LANGUAGES = new Set(['csharp', 'java']);
30
31
  function typeFqn(type, ir) {
31
32
  const pkg = type.package || ir.meta.package || '';
32
33
  return pkg ? `${pkg}.${type.name}` : type.name;
@@ -56,9 +57,13 @@ function isLiteralLocal(ir, lines, call, name) {
56
57
  return false;
57
58
  const assignOp = new RegExp(`(?<![\\w.])${name}\\s*(?:[-+*/%&|^?]|<<|>>)?=(?!=)`, 'g');
58
59
  const literal = '@?"(?:[^"\\\\]|\\\\.)*"';
59
- const declLiteral = new RegExp(`^\\s*(?:const\\s+)?[\\w<>\\[\\],.?]+\\s+${name}\\s*=\\s*${literal}\\s*;\\s*(?://.*)?$`);
60
+ const lang = ir.meta.language;
61
+ const typeDecl = lang === 'java'
62
+ ? `(?:final\\s+)?[\\w<>\\[\\],.?]+`
63
+ : `(?:const\\s+)?[\\w<>\\[\\],.?]+`;
64
+ const declLiteral = new RegExp(`^\\s*${typeDecl}\\s+${name}\\s*=\\s*${literal}\\s*;\\s*(?://.*)?$`);
60
65
  const plainLiteral = new RegExp(`^\\s*${name}\\s*=\\s*${literal}\\s*;\\s*(?://.*)?$`);
61
- const bareDecl = new RegExp(`^\\s*(?:const\\s+)?[\\w<>\\[\\],.?]+\\s+${name}\\s*;`);
66
+ const bareDecl = new RegExp(`^\\s*${typeDecl}\\s+${name}\\s*;`);
62
67
  const mutate = new RegExp(`\\b(?:out|ref)\\s+${name}\\b|(?:\\+\\+|--)\\s*${name}\\b|\\b${name}\\s*(?:\\+\\+|--)`);
63
68
  let assignments = 0;
64
69
  let assignLine = -1;
@@ -166,10 +171,12 @@ export function isConstantArg(ir, lines, call, position) {
166
171
  * sink's method and to every relay method the transitive step walks through, so a virtual,
167
172
  * overridden, interface or overloaded relay keeps the flow.
168
173
  */
169
- function hasEnumerableCallers(type, method, derivedFrom) {
174
+ function hasEnumerableCallers(type, method, derivedFrom, language) {
170
175
  if (type.kind !== 'class')
171
176
  return false;
172
- if (method.modifiers.some(m => m === 'virtual' || m === 'abstract' || m === 'override'))
177
+ if (method.modifiers.some(m => m === 'abstract'))
178
+ return false;
179
+ if (language === 'csharp' && method.modifiers.some(m => m === 'virtual' || m === 'override'))
173
180
  return false;
174
181
  if (derivedFrom.has(type.name))
175
182
  return false;
@@ -179,6 +186,8 @@ const TRANSITIVE_MAX_DEPTH = 4;
179
186
  function isConstantArgRecursive(ctx, ir, lines, call, position, depth, visiting) {
180
187
  if (isDirectConstantArg(ir, lines, call, position))
181
188
  return true;
189
+ if (isConstantReturnLocal(ctx, ir, lines, call, position))
190
+ return true;
182
191
  if (depth >= TRANSITIVE_MAX_DEPTH)
183
192
  return false;
184
193
  const arg = call.arguments.find(a => a.position === position);
@@ -187,26 +196,31 @@ function isConstantArgRecursive(ctx, ir, lines, call, position, depth, visiting)
187
196
  const encl = enclosingMethod(ir, call.location.line);
188
197
  if (!encl)
189
198
  return false;
190
- if (!hasEnumerableCallers(encl.type, encl.method, ctx.derivedFrom))
199
+ if (!hasEnumerableCallers(encl.type, encl.method, ctx.derivedFrom, ir.meta.language))
191
200
  return false;
192
201
  const paramIdx = encl.method.parameters.findIndex(p => p.name === arg.variable);
193
202
  if (paramIdx < 0)
194
203
  return false;
195
204
  const fqn = `${typeFqn(encl.type, ir)}.${encl.method.name}`;
205
+ const relayFile = ctx.fileAnalyses.find(f => f.analysis === ir)?.file;
196
206
  const visitKey = `${fqn}:${paramIdx}`;
197
207
  if (visiting.has(visitKey))
198
208
  return false;
199
209
  visiting.add(visitKey);
200
210
  let resolvedToMethod = 0;
201
211
  for (const site of ctx.callsByName.get(encl.method.name) ?? []) {
212
+ if (relayFile !== undefined && site.file !== relayFile && declaresType(ctx.fileAnalyses, site.file, encl.type.name))
213
+ continue;
202
214
  const r = ctx.resolver.resolveCall(site.call, site.file);
203
215
  // Rule 3, as at the sink: one call of this name that does not resolve exactly might be
204
216
  // this relay receiving tainted data, so the relay's argument is not known to be constant.
217
+ if (resolvesElsewhere(r, fqn))
218
+ continue;
205
219
  if (!r || r.resolution !== 'exact') {
206
220
  visiting.delete(visitKey);
207
221
  return false;
208
222
  }
209
- if (r.targetMethod !== fqn)
223
+ if (r.targetMethod !== fqn || (relayFile !== undefined && site.file !== relayFile && r.targetFile !== relayFile))
210
224
  continue;
211
225
  const callerIr = ctx.fileAnalyses.find(f => f.file === site.file)?.analysis;
212
226
  const callerLines = ctx.sourceLinesByFile.get(site.file);
@@ -224,15 +238,16 @@ function isConstantArgRecursive(ctx, ir, lines, call, position, depth, visiting)
224
238
  return resolvedToMethod > 0;
225
239
  }
226
240
  export function applyConstantCallerGate(fileAnalyses, projectGraph, sourceLinesByFile) {
227
- const candidates = fileAnalyses.filter(fa => fa.analysis.meta.language === 'csharp'
228
- && (fa.analysis.taint?.flows ?? []).some(f => f.source_type === 'interprocedural_param'));
241
+ const candidates = fileAnalyses.filter(fa => GATE_LANGUAGES.has(fa.analysis.meta.language)
242
+ && (fa.analysis.taint?.flows ?? []).some(f => f.source_type === 'interprocedural_param'
243
+ || (f.source_type === 'plugin_param' && fa.analysis.meta.language === 'java')));
229
244
  if (candidates.length === 0)
230
245
  return;
231
246
  const resolver = projectGraph.resolver;
232
- const csharp = fileAnalyses.filter(fa => fa.analysis.meta.language === 'csharp');
247
+ const gated = fileAnalyses.filter(fa => GATE_LANGUAGES.has(fa.analysis.meta.language));
233
248
  const callsByName = new Map();
234
249
  const derivedFrom = new Set();
235
- for (const fa of csharp) {
250
+ for (const fa of gated) {
236
251
  for (const call of fa.analysis.calls) {
237
252
  const arr = callsByName.get(call.method_name) ?? [];
238
253
  arr.push({ file: fa.file, call });
@@ -255,10 +270,51 @@ export function applyConstantCallerGate(fileAnalyses, projectGraph, sourceLinesB
255
270
  for (const fa of candidates) {
256
271
  const ir = fa.analysis;
257
272
  const flows = ir.taint.flows ?? [];
273
+ const lines0 = sourceLinesByFile.get(fa.file) ?? [];
274
+ /** Every in-project caller of `method` passes a constant at `position`; false keeps the flow. */
275
+ const callersConstant = (type, method, position) => {
276
+ const fqn = `${typeFqn(type, ir)}.${method.name}`;
277
+ let resolvedToMethod = 0;
278
+ for (const site of callsByName.get(method.name) ?? []) {
279
+ if (site.file !== fa.file && declaresType(fileAnalyses, site.file, type.name))
280
+ continue;
281
+ const r = resolver.resolveCall(site.call, site.file);
282
+ if (resolvesElsewhere(r, fqn))
283
+ continue;
284
+ if (!r || r.resolution !== 'exact')
285
+ return false;
286
+ // Same FQN in another file is another method: nested classes of the
287
+ // same simple name in sibling files share it (every OWASP test has its
288
+ // own inner `Test.doSomething`, cognium-dev#976).
289
+ if (r.targetMethod !== fqn || (site.file !== fa.file && r.targetFile !== fa.file))
290
+ continue;
291
+ const callerIr = fileAnalyses.find(f => f.file === site.file)?.analysis;
292
+ const lines = sourceLinesByFile.get(site.file);
293
+ if (!callerIr || !lines || !isConstantArgRecursive(gateCtx, callerIr, lines, site.call, position, 0, new Set()))
294
+ return false;
295
+ resolvedToMethod++;
296
+ }
297
+ return resolvedToMethod > 0;
298
+ };
258
299
  const kept = flows.filter(flow => {
300
+ if (flow.source_type === 'plugin_param' && ir.meta.language === 'java') {
301
+ if (flows.some(o => o !== flow && o.sink_line === flow.sink_line &&
302
+ o.source_type !== 'interprocedural_param' && o.source_type !== 'plugin_param'))
303
+ return true;
304
+ const encl = enclosingMethod(ir, flow.source_line);
305
+ if (!encl || !hasEnumerableCallers(encl.type, encl.method, derivedFrom, ir.meta.language))
306
+ return true;
307
+ const positions = localMapParamPositions(lines0, encl.method, flow.source_line);
308
+ if (!positions)
309
+ return true;
310
+ return !positions.every(pos => callersConstant(encl.type, encl.method, pos));
311
+ }
259
312
  if (flow.source_type !== 'interprocedural_param')
260
313
  return true;
261
- const variable = flow.path[0]?.variable;
314
+ // The first step names the parameter, or (#976) carries the source's
315
+ // location text `"String param in doSomething"`: take the name from it.
316
+ const raw = flow.path[0]?.variable;
317
+ const variable = raw ? (/^\S+\s+([A-Za-z_]\w*)\s+in\s+\S+$/.exec(raw)?.[1] ?? raw) : raw;
262
318
  if (!variable)
263
319
  return true;
264
320
  if (flows.some(o => o !== flow && o.sink_line === flow.sink_line && o.source_type !== 'interprocedural_param'))
@@ -270,29 +326,149 @@ export function applyConstantCallerGate(fileAnalyses, projectGraph, sourceLinesB
270
326
  if (!encl || encl.method.name !== src.in_method)
271
327
  return true;
272
328
  const { type, method } = encl;
273
- if (!hasEnumerableCallers(type, method, derivedFrom))
329
+ if (!hasEnumerableCallers(type, method, derivedFrom, ir.meta.language))
274
330
  return true;
275
331
  const position = method.parameters.findIndex(p => p.name === variable);
276
332
  if (position < 0)
277
333
  return true;
278
- const fqn = `${typeFqn(type, ir)}.${method.name}`;
279
- let resolvedToMethod = 0;
280
- for (const site of callsByName.get(method.name) ?? []) {
281
- const r = resolver.resolveCall(site.call, site.file);
282
- if (!r || r.resolution !== 'exact')
283
- return true;
284
- if (r.targetMethod !== fqn)
285
- continue;
286
- const callerIr = fileAnalyses.find(f => f.file === site.file)?.analysis;
287
- const lines = sourceLinesByFile.get(site.file);
288
- if (!callerIr || !lines || !isConstantArgRecursive(gateCtx, callerIr, lines, site.call, position, 0, new Set()))
289
- return true;
290
- resolvedToMethod++;
291
- }
292
- return resolvedToMethod === 0;
334
+ return !callersConstant(type, method, position);
293
335
  });
294
336
  if (kept.length !== flows.length)
295
337
  ir.taint.flows = kept;
296
338
  }
297
339
  }
340
+ /**
341
+ * A dispatch that provably cannot land on `fqn`: a polymorphic resolution
342
+ * (interface call) whose candidate implementations exclude it. OWASP's
343
+ * `thing.doSomething(x)` on `ThingInterface` is not the test's own inner
344
+ * `Test.doSomething`, so it no longer disables the gate for every helper of
345
+ * that name (#976).
346
+ */
347
+ function resolvesElsewhere(r, fqn) {
348
+ if (!r || r.resolution !== 'polymorphic' || r.targetMethod === fqn)
349
+ return false;
350
+ return Array.isArray(r.candidates) && r.candidates.length > 0 && !r.candidates.includes(fqn);
351
+ }
352
+ /**
353
+ * The argument is a local whose every assignment in the caller is a string
354
+ * literal or a call that resolves exactly to a project method returning only
355
+ * string literals (OWASP `String param = scr.getTheValue("…")`, whose body is
356
+ * `return "bar";`, cognium-dev#976).
357
+ */
358
+ function isConstantReturnLocal(ctx, ir, lines, call, position) {
359
+ if (ir.meta.language !== 'java')
360
+ return false;
361
+ const arg = call.arguments.find(a => a.position === position);
362
+ const name = arg?.variable;
363
+ if (!name || (arg.expression ?? '').trim() !== name || !/^[A-Za-z_]\w*$/.test(name))
364
+ return false;
365
+ const encl = enclosingMethod(ir, call.location.line);
366
+ if (!encl || encl.method.parameters.some(p => p.name === name))
367
+ return false;
368
+ const file = ctx.fileAnalyses.find(f => f.analysis === ir)?.file;
369
+ if (!file)
370
+ return false;
371
+ const assign = new RegExp(`(?:^|[;{]|\\b(?:if|else)\\b[^;]*?)\\s*(?:[\\w<>\\[\\].]+\\s+)?${name}\\s*=(?!=)\\s*(.+?);`);
372
+ const literal = /^"(?:[^"\\]|\\.)*"$/;
373
+ let viaCall = 0;
374
+ for (let l = encl.method.start_line; l < call.location.line; l++) {
375
+ const text = (lines[l - 1] ?? '').replace(/\/\/.*$/, '');
376
+ if (new RegExp(`(?:\\+\\+|--)\\s*${name}\\b|\\b${name}\\s*(?:\\+\\+|--|[-+*/%&|^]=)`).test(text))
377
+ return false;
378
+ const m = assign.exec(text);
379
+ if (!m)
380
+ continue;
381
+ const rhs = m[1].trim();
382
+ if (literal.test(rhs))
383
+ continue;
384
+ const callee = ir.calls.find(c => c.location.line === l && rhs.includes(`${c.method_name}(`));
385
+ if (!callee)
386
+ return false;
387
+ const r = ctx.resolver.resolveCall(callee, file);
388
+ if (!r || r.resolution !== 'exact' || !methodReturnsOnlyLiterals(ctx, r.targetFile, r.targetMethod))
389
+ return false;
390
+ viaCall++;
391
+ }
392
+ return viaCall > 0;
393
+ }
394
+ function methodReturnsOnlyLiterals(ctx, file, fqn) {
395
+ const ir = ctx.fileAnalyses.find(f => f.file === file)?.analysis;
396
+ const lines = ctx.sourceLinesByFile.get(file);
397
+ if (!ir || !lines)
398
+ return false;
399
+ const name = fqn.split('.').pop();
400
+ for (const type of ir.types) {
401
+ if (fqn !== `${typeFqn(type, ir)}.${name}`)
402
+ continue;
403
+ const methods = type.methods.filter(m => m.name === name);
404
+ if (methods.length !== 1)
405
+ return false; // overloaded: which one is unknown
406
+ const m = methods[0];
407
+ let returns = 0;
408
+ for (let l = m.start_line; l <= m.end_line; l++) {
409
+ const text = (lines[l - 1] ?? '').replace(/\/\/.*$/, '');
410
+ if (!/\breturn\b/.test(text))
411
+ continue;
412
+ for (const m of text.matchAll(/\breturn\b([^;]*);?/g)) {
413
+ if (!/^\s*"(?:[^"\\]|\\.)*"\s*$/.test(m[1]))
414
+ return false;
415
+ returns++;
416
+ }
417
+ }
418
+ return returns > 0;
419
+ }
420
+ return false;
421
+ }
422
+ /**
423
+ * Does `file` declare its own type named `name`? Its unqualified uses of that
424
+ * name are its own type (Java shadowing), whatever the shared FQN says.
425
+ */
426
+ function declaresType(fileAnalyses, file, name) {
427
+ const ir = fileAnalyses.find(f => f.file === file)?.analysis;
428
+ return !!ir && ir.meta.language === 'java' && ir.types.some(t => t.name === name);
429
+ }
430
+ /**
431
+ * A `plugin_param` read `x = (T) m.get("k")` from a map `m` the method builds
432
+ * itself (`m = new …Map…()`, never reassigned or passed out), whose every
433
+ * `m.put(_, v)` value is a string literal or one of the method's parameters:
434
+ * the positions of those parameters (an empty list when only literals go in).
435
+ * Anything else answers null and the flow is kept (#976, OWASP map helpers fed
436
+ * by `scr.getTheValue`).
437
+ */
438
+ function localMapParamPositions(lines, method, sourceLine) {
439
+ const read = /([A-Za-z_]\w*)\s*\.\s*get\s*\(/.exec(lines[sourceLine - 1] ?? '');
440
+ if (!read)
441
+ return null;
442
+ const map = read[1];
443
+ const body = [];
444
+ for (let l = method.start_line; l <= method.end_line; l++)
445
+ body.push((lines[l - 1] ?? '').replace(/\/\/.*$/, ''));
446
+ const text = body.join('\n');
447
+ const created = new RegExp(`\\b${map}\\s*=\\s*new\\s+[\\w.]*Map\\b`).test(text);
448
+ const assigned = text.match(new RegExp(`(?<![\\w.])${map}\\s*=(?!=)`, 'g'))?.length ?? 0;
449
+ if (!created || assigned !== 1)
450
+ return null;
451
+ // Passed to a call or returned: its contents are no longer the method's own.
452
+ if (new RegExp(`[(,]\\s*${map}\\s*[,)]|\\breturn\\s+${map}\\b`).test(text))
453
+ return null;
454
+ const params = method.parameters.map(p => p.name);
455
+ const positions = new Set();
456
+ let puts = 0;
457
+ for (const m of text.matchAll(new RegExp(`\\b${map}\\s*\\.\\s*(put|putAll|putIfAbsent|compute\\w*|merge|replace\\w*)\\s*\\(([^;]*)\\)\\s*;`, 'g'))) {
458
+ if (m[1] !== 'put')
459
+ return null;
460
+ const comma = m[2].indexOf(',');
461
+ if (comma < 0)
462
+ return null;
463
+ const value = m[2].slice(comma + 1).trim();
464
+ puts++;
465
+ if (/^"(?:[^"\\]|\\.)*"$/.test(value))
466
+ continue;
467
+ const idx = params.indexOf(value);
468
+ if (idx < 0)
469
+ return null;
470
+ positions.add(idx);
471
+ }
472
+ return puts > 0 ? [...positions] : null;
473
+ }
298
474
  //# sourceMappingURL=constant-caller-gate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constant-caller-gate.js","sourceRoot":"","sources":["../../src/analysis/constant-caller-gate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constant-caller-gate.js","sourceRoot":"","sources":["../../src/analysis/constant-caller-gate.ts"],"names":[],"mappings":"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"}
@@ -220,6 +220,8 @@ export declare class ConstantPropagator {
220
220
  * helper that always returns a constant — clears the variable. Anything else stops being tracked here, which is what Go
221
221
  * assignments got before this handler existed: the DFG decides.
222
222
  */
223
+ /** `var x = expr` / `var x T = expr` — same clean/taint rules as `:=` (#783). */
224
+ private handleGoVarDeclaration;
223
225
  private handleGoAssignment;
224
226
  /**
225
227
  * A Go right-hand side whose value is clean regardless of its inputs: a
@@ -321,6 +323,8 @@ export declare class ConstantPropagator {
321
323
  private getTaintTypeForVariable;
322
324
  isTaintedExpression(node: Node): boolean;
323
325
  private isTaintedExpressionImpl;
326
+ /** Is an argument of `call` an inline sanitizer call over tainted input (itself possibly nested)? */
327
+ private argIsSanitizedTaint;
324
328
  private isTaintedExpressionStep;
325
329
  /** cognium-dev#476: copy tainted array element indices across `System.arraycopy`. */
326
330
  private handleSystemArrayCopy;
@@ -1 +1 @@
1
- {"version":3,"file":"propagator.d.ts","sourceRoot":"","sources":["../../../src/analysis/constant-propagation/propagator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"propagator.d.ts","sourceRoot":"","sources":["../../../src/analysis/constant-propagation/propagator.ts"],"names":[],"mappings":"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"}
@@ -986,6 +986,9 @@ export class ConstantPropagator {
986
986
  case 'assignment_statement':
987
987
  this.handleGoAssignment(node);
988
988
  return false;
989
+ case 'var_declaration':
990
+ this.handleGoVarDeclaration(node);
991
+ return false;
989
992
  case 'update_expression':
990
993
  this.handleUpdateExpression(node);
991
994
  return false;
@@ -1462,6 +1465,71 @@ export class ConstantPropagator {
1462
1465
  * helper that always returns a constant — clears the variable. Anything else stops being tracked here, which is what Go
1463
1466
  * assignments got before this handler existed: the DFG decides.
1464
1467
  */
1468
+ /** `var x = expr` / `var x T = expr` — same clean/taint rules as `:=` (#783). */
1469
+ handleGoVarDeclaration(node) {
1470
+ for (let i = 0; i < node.childCount; i++) {
1471
+ const spec = node.child(i);
1472
+ if (!spec || spec.type !== 'var_spec')
1473
+ continue;
1474
+ const nameNode = spec.childForFieldName('name');
1475
+ let valueNode = spec.childForFieldName('value');
1476
+ if (!nameNode || !valueNode)
1477
+ continue;
1478
+ const names = [];
1479
+ if (nameNode.type === 'identifier') {
1480
+ names.push(getNodeText(nameNode, this.source));
1481
+ }
1482
+ else if (nameNode.type === 'identifier_list') {
1483
+ for (const c of nameNode.children) {
1484
+ if (c.type === 'identifier')
1485
+ names.push(getNodeText(c, this.source));
1486
+ }
1487
+ }
1488
+ if (valueNode.type === 'expression_list') {
1489
+ valueNode =
1490
+ valueNode.children.find((c) => c.type !== ',' && c.type !== 'comment') ?? valueNode;
1491
+ }
1492
+ if (names.length === 0)
1493
+ continue;
1494
+ const line = getNodeLine(node);
1495
+ for (const varName of names) {
1496
+ if (varName === '_')
1497
+ continue;
1498
+ const scopedName = this.getScopedName(varName);
1499
+ this.goScopedNames.add(scopedName);
1500
+ if (this.isTaintedExpression(valueNode)) {
1501
+ this.goUnknownVars.add(scopedName);
1502
+ this.tainted.add(scopedName);
1503
+ this.sanitizedVars.delete(scopedName);
1504
+ this.sanitizedVarUncovered.delete(scopedName);
1505
+ this.definitionNodes.set(scopedName, valueNode);
1506
+ this.symbols.set(scopedName, createUnknown(line));
1507
+ continue;
1508
+ }
1509
+ if (!this.isGoKnownCleanRhs(valueNode) || this.goUnknownVars.has(scopedName)) {
1510
+ this.goUnknownVars.add(scopedName);
1511
+ this.symbols.delete(scopedName);
1512
+ this.sanitizedVars.delete(scopedName);
1513
+ this.sanitizedVarUncovered.delete(scopedName);
1514
+ if (!this.inConditionalBranch) {
1515
+ this.tainted.delete(scopedName);
1516
+ this.definitionNodes.delete(scopedName);
1517
+ }
1518
+ continue;
1519
+ }
1520
+ if (this.inConditionalBranch) {
1521
+ this.goUnknownVars.add(scopedName);
1522
+ this.symbols.delete(scopedName);
1523
+ continue;
1524
+ }
1525
+ this.tainted.delete(scopedName);
1526
+ this.definitionNodes.delete(scopedName);
1527
+ this.symbols.set(scopedName, this.evaluateExpression(valueNode));
1528
+ this.sanitizedVars.delete(scopedName);
1529
+ this.sanitizedVarUncovered.delete(scopedName);
1530
+ }
1531
+ }
1532
+ }
1465
1533
  handleGoAssignment(node) {
1466
1534
  const left = node.childForFieldName('left');
1467
1535
  const right = node.childForFieldName('right');
@@ -2420,6 +2488,31 @@ export class ConstantPropagator {
2420
2488
  cache.set(rootId, false);
2421
2489
  return false;
2422
2490
  }
2491
+ /** Is an argument of `call` an inline sanitizer call over tainted input (itself possibly nested)? */
2492
+ argIsSanitizedTaint(call) {
2493
+ const argsNode = call.childForFieldName('arguments');
2494
+ if (!argsNode)
2495
+ return false;
2496
+ for (const arg of argsNode.children) {
2497
+ if (arg.type !== 'method_invocation')
2498
+ continue;
2499
+ const name = arg.childForFieldName('name');
2500
+ if (!name || !SANITIZER_METHODS.has(getNodeText(name, this.source)))
2501
+ continue;
2502
+ const inner = arg.childForFieldName('arguments');
2503
+ if (!inner)
2504
+ continue;
2505
+ for (const a of inner.children) {
2506
+ if (a.type === '(' || a.type === ')' || a.type === ',')
2507
+ continue;
2508
+ if (this.isTaintedExpression(a))
2509
+ return true;
2510
+ }
2511
+ if (this.argIsSanitizedTaint(arg))
2512
+ return true;
2513
+ }
2514
+ return false;
2515
+ }
2423
2516
  isTaintedExpressionStep(node) {
2424
2517
  const text = getNodeText(node, this.source);
2425
2518
  if (node.type === 'method_invocation') {
@@ -2427,6 +2520,12 @@ export class ConstantPropagator {
2427
2520
  const objectNode = node.childForFieldName('object');
2428
2521
  if (nameNode) {
2429
2522
  const methodName = getNodeText(nameNode, this.source);
2523
+ // An anti-sanitizer undoing an inline sanitizer is a round trip
2524
+ // (`Base64.getDecoder().decode(Base64.getEncoder().encode(param.getBytes()))`):
2525
+ // the result carries the sanitizer's tainted input (#976).
2526
+ if (ANTI_SANITIZER_METHODS.has(methodName) && this.argIsSanitizedTaint(node)) {
2527
+ return true;
2528
+ }
2430
2529
  if (SANITIZER_METHODS.has(methodName) && !this.localNonSanitizing.has(methodName)) {
2431
2530
  return false;
2432
2531
  }