circle-ir 4.14.2 → 4.16.0
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.
- package/configs/sinks/golang.json +4 -4
- package/dist/analysis/config-loader.d.ts.map +1 -1
- package/dist/analysis/config-loader.js +11 -7
- package/dist/analysis/config-loader.js.map +1 -1
- package/dist/analysis/const-table-lookup.d.ts +29 -0
- package/dist/analysis/const-table-lookup.d.ts.map +1 -0
- package/dist/analysis/const-table-lookup.js +145 -0
- package/dist/analysis/const-table-lookup.js.map +1 -0
- package/dist/analysis/constant-caller-gate.d.ts +39 -0
- package/dist/analysis/constant-caller-gate.d.ts.map +1 -0
- package/dist/analysis/constant-caller-gate.js +298 -0
- package/dist/analysis/constant-caller-gate.js.map +1 -0
- package/dist/analysis/constant-propagation/evaluator.d.ts.map +1 -1
- package/dist/analysis/constant-propagation/evaluator.js +3 -1
- package/dist/analysis/constant-propagation/evaluator.js.map +1 -1
- package/dist/analysis/constant-propagation/patterns.d.ts +19 -0
- package/dist/analysis/constant-propagation/patterns.d.ts.map +1 -1
- package/dist/analysis/constant-propagation/patterns.js +33 -0
- package/dist/analysis/constant-propagation/patterns.js.map +1 -1
- package/dist/analysis/constant-propagation/propagator.d.ts +59 -0
- package/dist/analysis/constant-propagation/propagator.d.ts.map +1 -1
- package/dist/analysis/constant-propagation/propagator.js +396 -49
- package/dist/analysis/constant-propagation/propagator.js.map +1 -1
- package/dist/analysis/constant-propagation/types.d.ts +9 -0
- package/dist/analysis/constant-propagation/types.d.ts.map +1 -1
- package/dist/analysis/findings.d.ts.map +1 -1
- package/dist/analysis/findings.js +149 -4
- package/dist/analysis/findings.js.map +1 -1
- package/dist/analysis/go-strings-replacer.d.ts +21 -0
- package/dist/analysis/go-strings-replacer.d.ts.map +1 -0
- package/dist/analysis/go-strings-replacer.js +145 -0
- package/dist/analysis/go-strings-replacer.js.map +1 -0
- package/dist/analysis/interprocedural.d.ts.map +1 -1
- package/dist/analysis/interprocedural.js +148 -0
- package/dist/analysis/interprocedural.js.map +1 -1
- package/dist/analysis/java-array-element-keys.d.ts +14 -0
- package/dist/analysis/java-array-element-keys.d.ts.map +1 -0
- package/dist/analysis/java-array-element-keys.js +36 -0
- package/dist/analysis/java-array-element-keys.js.map +1 -0
- package/dist/analysis/java-canonical-prefix.d.ts +42 -0
- package/dist/analysis/java-canonical-prefix.d.ts.map +1 -0
- package/dist/analysis/java-canonical-prefix.js +145 -0
- package/dist/analysis/java-canonical-prefix.js.map +1 -0
- package/dist/analysis/java-crlf-strip.d.ts +30 -0
- package/dist/analysis/java-crlf-strip.d.ts.map +1 -0
- package/dist/analysis/java-crlf-strip.js +195 -0
- package/dist/analysis/java-crlf-strip.js.map +1 -0
- package/dist/analysis/js-crlf-strip.d.ts +26 -0
- package/dist/analysis/js-crlf-strip.d.ts.map +1 -0
- package/dist/analysis/js-crlf-strip.js +244 -0
- package/dist/analysis/js-crlf-strip.js.map +1 -0
- package/dist/analysis/passes/cleartext-credential-transport-pass.d.ts +2 -0
- package/dist/analysis/passes/cleartext-credential-transport-pass.d.ts.map +1 -1
- package/dist/analysis/passes/cleartext-credential-transport-pass.js +64 -12
- package/dist/analysis/passes/cleartext-credential-transport-pass.js.map +1 -1
- package/dist/analysis/passes/cross-file-pass.d.ts.map +1 -1
- package/dist/analysis/passes/cross-file-pass.js +43 -0
- package/dist/analysis/passes/cross-file-pass.js.map +1 -1
- package/dist/analysis/passes/csharp-sanitizer-credit.d.ts +12 -0
- package/dist/analysis/passes/csharp-sanitizer-credit.d.ts.map +1 -1
- package/dist/analysis/passes/csharp-sanitizer-credit.js +127 -12
- package/dist/analysis/passes/csharp-sanitizer-credit.js.map +1 -1
- package/dist/analysis/passes/interprocedural-pass.d.ts +28 -0
- package/dist/analysis/passes/interprocedural-pass.d.ts.map +1 -1
- package/dist/analysis/passes/interprocedural-pass.js +20 -1
- package/dist/analysis/passes/interprocedural-pass.js.map +1 -1
- package/dist/analysis/passes/language-sources-pass.d.ts +76 -2
- package/dist/analysis/passes/language-sources-pass.d.ts.map +1 -1
- package/dist/analysis/passes/language-sources-pass.js +2045 -156
- package/dist/analysis/passes/language-sources-pass.js.map +1 -1
- package/dist/analysis/passes/param-source-flow-gate-pass.d.ts +8 -0
- package/dist/analysis/passes/param-source-flow-gate-pass.d.ts.map +1 -1
- package/dist/analysis/passes/param-source-flow-gate-pass.js +214 -6
- package/dist/analysis/passes/param-source-flow-gate-pass.js.map +1 -1
- package/dist/analysis/passes/plaintext-password-storage-pass.d.ts +6 -0
- package/dist/analysis/passes/plaintext-password-storage-pass.d.ts.map +1 -1
- package/dist/analysis/passes/plaintext-password-storage-pass.js +160 -0
- package/dist/analysis/passes/plaintext-password-storage-pass.js.map +1 -1
- package/dist/analysis/passes/scan-secrets-pass.d.ts +1 -1
- package/dist/analysis/passes/scan-secrets-pass.d.ts.map +1 -1
- package/dist/analysis/passes/scan-secrets-pass.js +7 -1
- package/dist/analysis/passes/scan-secrets-pass.js.map +1 -1
- package/dist/analysis/passes/sink-filter-pass.d.ts +1 -1
- package/dist/analysis/passes/sink-filter-pass.d.ts.map +1 -1
- package/dist/analysis/passes/sink-filter-pass.js +509 -27
- package/dist/analysis/passes/sink-filter-pass.js.map +1 -1
- package/dist/analysis/passes/taint-matcher-pass.d.ts.map +1 -1
- package/dist/analysis/passes/taint-matcher-pass.js +2 -2
- package/dist/analysis/passes/taint-matcher-pass.js.map +1 -1
- package/dist/analysis/passes/taint-propagation-pass.d.ts.map +1 -1
- package/dist/analysis/passes/taint-propagation-pass.js +1606 -60
- package/dist/analysis/passes/taint-propagation-pass.js.map +1 -1
- package/dist/analysis/passes/weak-hash-pass.d.ts +6 -0
- package/dist/analysis/passes/weak-hash-pass.d.ts.map +1 -1
- package/dist/analysis/passes/weak-hash-pass.js +191 -4
- package/dist/analysis/passes/weak-hash-pass.js.map +1 -1
- package/dist/analysis/passes/weak-random-pass.d.ts +5 -0
- package/dist/analysis/passes/weak-random-pass.d.ts.map +1 -1
- package/dist/analysis/passes/weak-random-pass.js +30 -0
- package/dist/analysis/passes/weak-random-pass.js.map +1 -1
- package/dist/analysis/project-callee-escape-gate.d.ts +40 -0
- package/dist/analysis/project-callee-escape-gate.d.ts.map +1 -0
- package/dist/analysis/project-callee-escape-gate.js +243 -0
- package/dist/analysis/project-callee-escape-gate.js.map +1 -0
- package/dist/analysis/rust-literal-guard-rebind.d.ts +34 -0
- package/dist/analysis/rust-literal-guard-rebind.d.ts.map +1 -0
- package/dist/analysis/rust-literal-guard-rebind.js +197 -0
- package/dist/analysis/rust-literal-guard-rebind.js.map +1 -0
- package/dist/analysis/rust-literal-guard.d.ts +33 -0
- package/dist/analysis/rust-literal-guard.d.ts.map +1 -0
- package/dist/analysis/rust-literal-guard.js +422 -0
- package/dist/analysis/rust-literal-guard.js.map +1 -0
- package/dist/analysis/scalar-derivation.d.ts +33 -0
- package/dist/analysis/scalar-derivation.d.ts.map +1 -0
- package/dist/analysis/scalar-derivation.js +368 -0
- package/dist/analysis/scalar-derivation.js.map +1 -0
- package/dist/analysis/taint-matcher.d.ts +2 -2
- package/dist/analysis/taint-matcher.d.ts.map +1 -1
- package/dist/analysis/taint-matcher.js +695 -34
- package/dist/analysis/taint-matcher.js.map +1 -1
- package/dist/analysis/taint-propagation.d.ts +26 -1
- package/dist/analysis/taint-propagation.d.ts.map +1 -1
- package/dist/analysis/taint-propagation.js +375 -24
- package/dist/analysis/taint-propagation.js.map +1 -1
- package/dist/analyzer.d.ts +16 -2
- package/dist/analyzer.d.ts.map +1 -1
- package/dist/analyzer.js +19 -2
- package/dist/analyzer.js.map +1 -1
- package/dist/browser/circle-ir.js +25539 -19200
- package/dist/core/circle-ir-core.cjs +3945 -2126
- package/dist/core/circle-ir-core.js +3945 -2126
- package/dist/core/extractors/calls.d.ts +12 -1
- package/dist/core/extractors/calls.d.ts.map +1 -1
- package/dist/core/extractors/calls.js +332 -22
- package/dist/core/extractors/calls.js.map +1 -1
- package/dist/core/extractors/dfg.js +336 -10
- package/dist/core/extractors/dfg.js.map +1 -1
- package/dist/core/extractors/types.d.ts +5 -1
- package/dist/core/extractors/types.d.ts.map +1 -1
- package/dist/core/extractors/types.js +62 -0
- package/dist/core/extractors/types.js.map +1 -1
- package/dist/graph/analysis-pass.d.ts +6 -1
- package/dist/graph/analysis-pass.d.ts.map +1 -1
- package/dist/graph/analysis-pass.js +2 -1
- package/dist/graph/analysis-pass.js.map +1 -1
- package/dist/graph/code-graph.d.ts +9 -0
- package/dist/graph/code-graph.d.ts.map +1 -1
- package/dist/graph/code-graph.js +11 -0
- package/dist/graph/code-graph.js.map +1 -1
- package/dist/navigation/navigation-index.d.ts +134 -14
- package/dist/navigation/navigation-index.d.ts.map +1 -1
- package/dist/navigation/navigation-index.js +1158 -104
- package/dist/navigation/navigation-index.js.map +1 -1
- package/dist/navigation/types.d.ts +59 -2
- package/dist/navigation/types.d.ts.map +1 -1
- package/dist/resolution/cross-file.d.ts +16 -0
- package/dist/resolution/cross-file.d.ts.map +1 -1
- package/dist/resolution/cross-file.js +110 -42
- package/dist/resolution/cross-file.js.map +1 -1
- package/dist/resolution/type-hierarchy.d.ts +3 -0
- package/dist/resolution/type-hierarchy.d.ts.map +1 -1
- package/dist/resolution/type-hierarchy.js +45 -1
- package/dist/resolution/type-hierarchy.js.map +1 -1
- package/dist/types/index.d.ts +33 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/wasm/web-tree-sitter.wasm +0 -0
- package/package.json +3 -3
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
* - Handles method call chains
|
|
8
8
|
*/
|
|
9
9
|
import { CodeGraph } from '../graph/index.js';
|
|
10
|
+
/** cognium-dev#626 — in-place Java argv container passed as a call argument. */
|
|
11
|
+
const ARGV_CONTAINER_ARG_RE = /^\s*(?:Arrays\s*\.\s*asList|List\s*\.\s*of|Collections\s*\.\s*singletonList)\s*\(|^\s*new\s+String\s*\[\s*\]\s*\{/;
|
|
10
12
|
/**
|
|
11
13
|
* Perform inter-procedural taint analysis.
|
|
12
14
|
*
|
|
@@ -104,6 +106,10 @@ const CSHARP_NON_ESCAPE_METHODS = new Set([
|
|
|
104
106
|
// claim needing its own change.
|
|
105
107
|
'Add', 'AddLast', 'AddFirst', 'AddRange', 'TryAdd', 'Insert', 'Push',
|
|
106
108
|
'Enqueue',
|
|
109
|
+
// Collection lookups (cognium-dev#665). Using a value as a key into an
|
|
110
|
+
// in-memory map hands nothing out of the program; it is the allowlist
|
|
111
|
+
// shape (`if (!Catalog.TryGetValue(sku, out var price)) return …`).
|
|
112
|
+
'TryGetValue', 'ContainsKey', 'ContainsValue', 'GetValueOrDefault',
|
|
107
113
|
// Encoders (cognium-dev#518). Encoding a value hands back a string; nothing
|
|
108
114
|
// has left the program at `Uri.EscapeDataString(input)`.
|
|
109
115
|
'EscapeDataString', 'EscapeUriString', 'UrlEncode', 'UrlPathEncode',
|
|
@@ -116,8 +122,124 @@ function isCSharpNonEscapeCall(call) {
|
|
|
116
122
|
return true;
|
|
117
123
|
if (CSHARP_NON_ESCAPE_METHODS.has(name))
|
|
118
124
|
return true;
|
|
125
|
+
// The inherited controller helper `Content(body, contentType)` writes the
|
|
126
|
+
// response body; the `Content` xss sink judges it by its content type
|
|
127
|
+
// (cognium-dev#580), so a plain-text or JSON body is not an escape either.
|
|
128
|
+
if (name === 'Content' && (call.receiver === null || call.receiver === 'this' || call.receiver === 'base'))
|
|
129
|
+
return true;
|
|
119
130
|
return false;
|
|
120
131
|
}
|
|
132
|
+
// Java (#468, slice): JDK exception / error types. Constructing one wraps the
|
|
133
|
+
// value into an object that has not left the program, the counterpart of the
|
|
134
|
+
// error-construction rows in the Go (#455) and C# (#474) gates. Loggers,
|
|
135
|
+
// formatters, StringBuilder and project-defined exception classes are NOT
|
|
136
|
+
// gated here: an unknown callee still escapes.
|
|
137
|
+
const JAVA_LANG_EXCEPTION_TYPES = new Set([
|
|
138
|
+
'Exception', 'RuntimeException', 'IllegalArgumentException',
|
|
139
|
+
'IllegalStateException', 'UnsupportedOperationException',
|
|
140
|
+
'NullPointerException', 'IndexOutOfBoundsException', 'NumberFormatException',
|
|
141
|
+
'Error', 'AssertionError',
|
|
142
|
+
]);
|
|
143
|
+
// Java (#468, slice 2): JDK static formatters. Building a string sends the
|
|
144
|
+
// value nowhere, the counterpart of the formatter row in the Go gate (#455).
|
|
145
|
+
// Receiver-gated: only the exact JDK class, written bare (and not shadowed by a
|
|
146
|
+
// declared or differently-imported class of that name) or fully qualified.
|
|
147
|
+
// Instance `.format(...)` on any other receiver still escapes.
|
|
148
|
+
const JAVA_FORMATTER_CLASSES = new Map([
|
|
149
|
+
['String', 'java.lang'],
|
|
150
|
+
['MessageFormat', 'java.text'],
|
|
151
|
+
]);
|
|
152
|
+
function isJavaStaticFormatterCall(call, declaredTypeNames, imports, calls) {
|
|
153
|
+
if (call.method_name !== 'format' || !call.receiver)
|
|
154
|
+
return false;
|
|
155
|
+
// A formatter that is itself an argument of another call (`queue.publish(
|
|
156
|
+
// MessageFormat.format(..., v))`) keeps its escape: the enclosing call has no
|
|
157
|
+
// tainted variable of its own to report, so this call is where the value
|
|
158
|
+
// leaves.
|
|
159
|
+
const needle = `${call.receiver}.format(`;
|
|
160
|
+
for (const other of calls) {
|
|
161
|
+
if (other === call || other.method_name === 'format')
|
|
162
|
+
continue;
|
|
163
|
+
if (other.arguments.some(a => a.expression.includes(needle)))
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
const receiver = call.receiver;
|
|
167
|
+
const dot = receiver.lastIndexOf('.');
|
|
168
|
+
const simple = dot < 0 ? receiver : receiver.slice(dot + 1);
|
|
169
|
+
const pkg = JAVA_FORMATTER_CLASSES.get(simple);
|
|
170
|
+
if (pkg === undefined)
|
|
171
|
+
return false;
|
|
172
|
+
// Fully-qualified receiver: exactly `<pkg>.<Class>`.
|
|
173
|
+
if (dot >= 0)
|
|
174
|
+
return receiver === `${pkg}.${simple}`;
|
|
175
|
+
// Bare receiver: a class declared in this file, or an import of the simple
|
|
176
|
+
// name (or an alias for it) from another package, shadows the JDK class.
|
|
177
|
+
if (declaredTypeNames.has(simple))
|
|
178
|
+
return false;
|
|
179
|
+
for (const imp of imports) {
|
|
180
|
+
if (imp.alias === simple)
|
|
181
|
+
return false;
|
|
182
|
+
if (!imp.is_wildcard && imp.imported_name === simple && imp.from_package !== pkg)
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
// `String` is implicit; `MessageFormat` must be imported from java.text (or
|
|
186
|
+
// java.text.*), otherwise it may be a same-package class.
|
|
187
|
+
if (pkg === 'java.lang')
|
|
188
|
+
return true;
|
|
189
|
+
return imports.some(imp => imp.from_package === pkg && (imp.imported_name === simple || imp.is_wildcard));
|
|
190
|
+
}
|
|
191
|
+
function isJavaNonEscapeCall(call, declaredTypeNames, imports, calls) {
|
|
192
|
+
if (isJavaStaticFormatterCall(call, declaredTypeNames, imports, calls))
|
|
193
|
+
return true;
|
|
194
|
+
// Only a constructor call `new X(...)`: no receiver, and the resolved target
|
|
195
|
+
// is `X.<init>` (the extractor does not set `is_constructor` for Java).
|
|
196
|
+
if (call.receiver)
|
|
197
|
+
return false;
|
|
198
|
+
const isCtor = call.is_constructor === true ||
|
|
199
|
+
(call.resolution?.target ?? '').endsWith('.<init>');
|
|
200
|
+
if (!isCtor)
|
|
201
|
+
return false;
|
|
202
|
+
const written = call.method_name;
|
|
203
|
+
const simple = written.split('.').pop() ?? written;
|
|
204
|
+
// Fully-qualified spelling: only `java.lang.<X>`; anything else is a project
|
|
205
|
+
// or library class.
|
|
206
|
+
if (written.includes('.')) {
|
|
207
|
+
return written.startsWith('java.lang.') &&
|
|
208
|
+
(JAVA_LANG_EXCEPTION_TYPES.has(simple) || /(Exception|Error)$/.test(simple));
|
|
209
|
+
}
|
|
210
|
+
// An explicit import of the same simple name from another package, or a class
|
|
211
|
+
// declared in this file, shadows the java.lang type.
|
|
212
|
+
if (call.receiver_type_fqn && !call.receiver_type_fqn.startsWith('java.lang.'))
|
|
213
|
+
return false;
|
|
214
|
+
if (declaredTypeNames.has(simple))
|
|
215
|
+
return false;
|
|
216
|
+
return JAVA_LANG_EXCEPTION_TYPES.has(simple);
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Go: `<re>.MatchString(subject)` where `<re>` is a plain identifier whose every
|
|
220
|
+
* definition in the file is `regexp.MustCompile(<one string literal>)`. The call
|
|
221
|
+
* returns a bool and neither retains nor writes its subject, so a tainted subject
|
|
222
|
+
* has not left the program (#349). A pattern built from a variable, a receiver
|
|
223
|
+
* that is a parameter / field / reassigned or shadowed name, or a string-returning
|
|
224
|
+
* matcher (`FindString`) is not covered and keeps its escape.
|
|
225
|
+
*/
|
|
226
|
+
function isGoConstRegexMatchCall(call, graph, calls) {
|
|
227
|
+
if (call.method_name !== 'MatchString' || call.arguments.length !== 1)
|
|
228
|
+
return false;
|
|
229
|
+
const re = call.receiver ?? '';
|
|
230
|
+
if (!/^[A-Za-z_]\w*$/.test(re))
|
|
231
|
+
return false;
|
|
232
|
+
const defs = graph.defsByVar.get(re);
|
|
233
|
+
if (!defs || defs.length === 0)
|
|
234
|
+
return false;
|
|
235
|
+
return defs.every(def => def.kind === 'local' &&
|
|
236
|
+
calls.some(c => c.location.line === def.line &&
|
|
237
|
+
c.method_name === 'MustCompile' &&
|
|
238
|
+
c.receiver === 'regexp' &&
|
|
239
|
+
c.arguments.length === 1 &&
|
|
240
|
+
typeof c.arguments[0].literal === 'string' &&
|
|
241
|
+
/^(?:`[^`]*`|"(?:[^"\\]|\\.)*")$/.test(c.arguments[0].expression.trim())));
|
|
242
|
+
}
|
|
121
243
|
function isGoNonEscapeCall(call) {
|
|
122
244
|
const name = call.method_name;
|
|
123
245
|
const recv = (call.receiver ?? '').split('.').pop() ?? '';
|
|
@@ -163,6 +285,7 @@ export function analyzeInterprocedural(graphOrTypes, callsOrSources, dfgOrSinks,
|
|
|
163
285
|
}
|
|
164
286
|
const types = graph.ir.types;
|
|
165
287
|
const calls = graph.ir.calls;
|
|
288
|
+
const declaredTypeNames = new Set(types.map(t => t.name));
|
|
166
289
|
// Build method nodes from type information
|
|
167
290
|
const methodNodes = buildMethodNodes(types);
|
|
168
291
|
// Build call graph edges with receiver type resolution
|
|
@@ -230,6 +353,9 @@ export function analyzeInterprocedural(graphOrTypes, callsOrSources, dfgOrSinks,
|
|
|
230
353
|
'text', 'textContent', 'innerText', 'createTextNode',
|
|
231
354
|
'addClass', 'removeClass', 'toggleClass',
|
|
232
355
|
'parseInt', 'parseFloat', 'Number', 'String', 'Boolean',
|
|
356
|
+
// Pure serializers (JSON.stringify, qs/querystring.stringify) return a
|
|
357
|
+
// string to the caller; the value has not left the program (#670).
|
|
358
|
+
'stringify',
|
|
233
359
|
// I/O stream wrappers — pure decorators that wrap a stream, not security sinks
|
|
234
360
|
// e.g. new InputStreamReader(proc.getInputStream()) is safe; the underlying stream is the source
|
|
235
361
|
'InputStreamReader', 'OutputStreamWriter',
|
|
@@ -296,6 +422,20 @@ export function analyzeInterprocedural(graphOrTypes, callsOrSources, dfgOrSinks,
|
|
|
296
422
|
if (isTaintedByDFG || isTaintedByCP) {
|
|
297
423
|
taintedArgPositions.push(arg.position);
|
|
298
424
|
taintedArgVars.push(arg.variable);
|
|
425
|
+
continue;
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
// cognium-dev#626: a Java argv container built in place —
|
|
429
|
+
// `launchCommand(Arrays.asList("/bin/sh", "-c", "make " + step))` — carries
|
|
430
|
+
// every tainted variable named inside it. For a call expression `variable`
|
|
431
|
+
// is the callee name, so the check above never sees `step`.
|
|
432
|
+
if (graph.ir.meta.language === 'java' && ARGV_CONTAINER_ARG_RE.test(arg.expression ?? '')) {
|
|
433
|
+
const inCode = (arg.expression ?? '').replace(/"(?:[^"\\]|\\.)*"/g, ' ');
|
|
434
|
+
const carried = graph.usesAtLine(call.location.line).find(u => u.def_id !== null && taintedDefIds.has(u.def_id) &&
|
|
435
|
+
new RegExp(`(?<![\\p{L}\\p{N}_.])${u.variable.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}(?![\\p{L}\\p{N}_])`, 'u').test(inCode));
|
|
436
|
+
if (carried) {
|
|
437
|
+
taintedArgPositions.push(arg.position);
|
|
438
|
+
taintedArgVars.push(carried.variable);
|
|
299
439
|
}
|
|
300
440
|
}
|
|
301
441
|
}
|
|
@@ -325,10 +465,18 @@ export function analyzeInterprocedural(graphOrTypes, callsOrSources, dfgOrSinks,
|
|
|
325
465
|
if (graph.ir.meta.language === 'go' && isGoNonEscapeCall(call)) {
|
|
326
466
|
continue;
|
|
327
467
|
}
|
|
468
|
+
// Go: a bool test of the value against a constant-pattern regexp (#349).
|
|
469
|
+
if (graph.ir.meta.language === 'go' && isGoConstRegexMatchCall(call, graph, calls)) {
|
|
470
|
+
continue;
|
|
471
|
+
}
|
|
328
472
|
// C# — same gate, same reason (#474, sibling of #455/#468).
|
|
329
473
|
if (graph.ir.meta.language === 'csharp' && isCSharpNonEscapeCall(call)) {
|
|
330
474
|
continue;
|
|
331
475
|
}
|
|
476
|
+
// Java — JDK exception construction and static formatters (#468, minimal slices).
|
|
477
|
+
if (graph.ir.meta.language === 'java' && isJavaNonEscapeCall(call, declaredTypeNames, graph.ir.imports ?? [], calls)) {
|
|
478
|
+
continue;
|
|
479
|
+
}
|
|
332
480
|
const bashSafeBuiltins = new Set([
|
|
333
481
|
'echo', 'printf', 'test', '[', '[[', 'true', 'false', ':',
|
|
334
482
|
'declare', 'local', 'export', 'readonly', 'typeset',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interprocedural.js","sourceRoot":"","sources":["../../src/analysis/interprocedural.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"interprocedural.js","sourceRoot":"","sources":["../../src/analysis/interprocedural.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cognium-dev#476 — shared keys for Java array element taint (`arr[0]`, `grid[0][0]`, …).
|
|
3
|
+
*/
|
|
4
|
+
export declare function javaArrayElementStorageKey(base: string, indices: string[]): {
|
|
5
|
+
arrayName: string;
|
|
6
|
+
indexKey: string;
|
|
7
|
+
};
|
|
8
|
+
export declare function parseJavaArrayAccessExpression(expr: string | undefined): {
|
|
9
|
+
base: string;
|
|
10
|
+
arrayName: string;
|
|
11
|
+
indexKey: string;
|
|
12
|
+
displayVar: string;
|
|
13
|
+
} | null;
|
|
14
|
+
//# sourceMappingURL=java-array-element-keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"java-array-element-keys.d.ts","sourceRoot":"","sources":["../../src/analysis/java-array-element-keys.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EAAE,GAChB;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CASzC;AAED,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB,GAAG,IAAI,CAoBP"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* cognium-dev#476 — shared keys for Java array element taint (`arr[0]`, `grid[0][0]`, …).
|
|
3
|
+
*/
|
|
4
|
+
export function javaArrayElementStorageKey(base, indices) {
|
|
5
|
+
if (indices.length === 1) {
|
|
6
|
+
return { arrayName: base, indexKey: indices[0] };
|
|
7
|
+
}
|
|
8
|
+
const prefix = indices.slice(0, -1).join('@');
|
|
9
|
+
return {
|
|
10
|
+
arrayName: `${base}@${prefix}`,
|
|
11
|
+
indexKey: indices[indices.length - 1],
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export function parseJavaArrayAccessExpression(expr) {
|
|
15
|
+
const trimmed = expr?.trim();
|
|
16
|
+
if (!trimmed)
|
|
17
|
+
return null;
|
|
18
|
+
// `grid[0][0]` — numeric indices only (matches constant-prop storage keys).
|
|
19
|
+
const multiNumeric = trimmed.match(/^(\w+)((?:\[\d+\])+)$/);
|
|
20
|
+
if (multiNumeric) {
|
|
21
|
+
const base = multiNumeric[1];
|
|
22
|
+
const indices = [...multiNumeric[2].matchAll(/\[(\d+)\]/g)].map(part => part[1]);
|
|
23
|
+
if (indices.length === 0)
|
|
24
|
+
return null;
|
|
25
|
+
const { arrayName, indexKey } = javaArrayElementStorageKey(base, indices);
|
|
26
|
+
return { base, arrayName, indexKey, displayVar: trimmed };
|
|
27
|
+
}
|
|
28
|
+
// `arr[0]`, `params[i]` — single subscript (legacy matcher shape).
|
|
29
|
+
const single = trimmed.match(/^(\w+)\[([^\]]+)\]$/);
|
|
30
|
+
if (!single)
|
|
31
|
+
return null;
|
|
32
|
+
const base = single[1];
|
|
33
|
+
const indexKey = single[2].trim();
|
|
34
|
+
return { base, arrayName: base, indexKey, displayVar: trimmed };
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=java-array-element-keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"java-array-element-keys.js","sourceRoot":"","sources":["../../src/analysis/java-array-element-keys.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,UAAU,0BAA0B,CACxC,IAAY,EACZ,OAAiB;IAEjB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IACnD,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9C,OAAO;QACL,SAAS,EAAE,GAAG,IAAI,IAAI,MAAM,EAAE;QAC9B,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;KACtC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,IAAwB;IAMrE,MAAM,OAAO,GAAG,IAAI,EAAE,IAAI,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAE1B,4EAA4E;IAC5E,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC5D,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,OAAO,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QACjF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACtC,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,0BAA0B,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1E,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;IAC5D,CAAC;IAED,mEAAmE;IACnE,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACpD,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACvB,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAClC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Is the base of a Java `<file>.getCanonicalPath().startsWith(<base>)` check a
|
|
3
|
+
* bare canonical path, with no trailing separator? (cognium-dev#618)
|
|
4
|
+
*
|
|
5
|
+
* A string-prefix check against a base that does not end in a separator is the
|
|
6
|
+
* classic prefix-confusion bypass: `/safe/dir-evil` starts with `/safe/dir`.
|
|
7
|
+
* That is the ESAPI CVE-2022-23457 shape:
|
|
8
|
+
*
|
|
9
|
+
* if (!dir.getCanonicalPath().startsWith(parent.getCanonicalPath())) throw ...
|
|
10
|
+
*
|
|
11
|
+
* This answers `true` only when it can prove the base is a bare canonical /
|
|
12
|
+
* absolute path call (`x.getCanonicalPath()`, `x.getCanonicalFile().getPath()`,
|
|
13
|
+
* `x.getAbsolutePath()`, …), either inline or through a local variable whose
|
|
14
|
+
* nearest preceding assignment in the same method is such a call — or a
|
|
15
|
+
* concatenation / compound assignment that still involves such a call and does
|
|
16
|
+
* not *end with* a separator. Anything it cannot resolve (a parameter, a field,
|
|
17
|
+
* a literal without a trailing separator it already accepted) answers `false`,
|
|
18
|
+
* so existing guard credit is kept. A trailing separator (`+ File.separator`,
|
|
19
|
+
* `+ "/"`, `+ '/'`, or a literal that ends with `/` or `\`) answers `false`:
|
|
20
|
+
*
|
|
21
|
+
* String base = root.getCanonicalPath() + File.separator;
|
|
22
|
+
* if (!f.getCanonicalPath().startsWith(base)) throw ... // still a guard
|
|
23
|
+
*
|
|
24
|
+
* A separator that is not at the end (`File.separator + path`, `path + "X"`,
|
|
25
|
+
* `path + "/foo"`) does not keep the credit: `/srv/data/foo-evil` still starts
|
|
26
|
+
* with `/srv/data/foo`.
|
|
27
|
+
*/
|
|
28
|
+
/** Text of the call argument opening at `open` (index of `(`), or null when unbalanced. */
|
|
29
|
+
export declare function javaCallArgument(text: string, open: number): string | null;
|
|
30
|
+
/**
|
|
31
|
+
* True when `arg` — the argument of a canonical-path `startsWith` call on line
|
|
32
|
+
* `lineIdx` (0-based) — provably evaluates to a canonical path with no
|
|
33
|
+
* trailing separator.
|
|
34
|
+
*/
|
|
35
|
+
export declare function javaCanonicalBaseLacksSeparator(lines: string[], lineIdx: number, arg: string): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* True when every canonical-path `startsWith(<base>)` in `text` (a method body)
|
|
38
|
+
* whose base mentions a canonical path call lacks a separator, and there is at
|
|
39
|
+
* least one such call. Used by the method-level guard check.
|
|
40
|
+
*/
|
|
41
|
+
export declare function javaCanonicalStartsWithAllBare(text: string): boolean;
|
|
42
|
+
//# sourceMappingURL=java-canonical-prefix.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"java-canonical-prefix.d.ts","sourceRoot":"","sources":["../../src/analysis/java-canonical-prefix.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAsBH,2FAA2F;AAC3F,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAe1E;AAwBD;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CActG;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAiBpE"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Is the base of a Java `<file>.getCanonicalPath().startsWith(<base>)` check a
|
|
3
|
+
* bare canonical path, with no trailing separator? (cognium-dev#618)
|
|
4
|
+
*
|
|
5
|
+
* A string-prefix check against a base that does not end in a separator is the
|
|
6
|
+
* classic prefix-confusion bypass: `/safe/dir-evil` starts with `/safe/dir`.
|
|
7
|
+
* That is the ESAPI CVE-2022-23457 shape:
|
|
8
|
+
*
|
|
9
|
+
* if (!dir.getCanonicalPath().startsWith(parent.getCanonicalPath())) throw ...
|
|
10
|
+
*
|
|
11
|
+
* This answers `true` only when it can prove the base is a bare canonical /
|
|
12
|
+
* absolute path call (`x.getCanonicalPath()`, `x.getCanonicalFile().getPath()`,
|
|
13
|
+
* `x.getAbsolutePath()`, …), either inline or through a local variable whose
|
|
14
|
+
* nearest preceding assignment in the same method is such a call — or a
|
|
15
|
+
* concatenation / compound assignment that still involves such a call and does
|
|
16
|
+
* not *end with* a separator. Anything it cannot resolve (a parameter, a field,
|
|
17
|
+
* a literal without a trailing separator it already accepted) answers `false`,
|
|
18
|
+
* so existing guard credit is kept. A trailing separator (`+ File.separator`,
|
|
19
|
+
* `+ "/"`, `+ '/'`, or a literal that ends with `/` or `\`) answers `false`:
|
|
20
|
+
*
|
|
21
|
+
* String base = root.getCanonicalPath() + File.separator;
|
|
22
|
+
* if (!f.getCanonicalPath().startsWith(base)) throw ... // still a guard
|
|
23
|
+
*
|
|
24
|
+
* A separator that is not at the end (`File.separator + path`, `path + "X"`,
|
|
25
|
+
* `path + "/foo"`) does not keep the credit: `/srv/data/foo-evil` still starts
|
|
26
|
+
* with `/srv/data/foo`.
|
|
27
|
+
*/
|
|
28
|
+
const BARE_CANONICAL_RE = /^[A-Za-z_][\w.]*(?:\s*\(\s*\))?(?:\s*\.\s*getCanonicalFile\s*\(\s*\)|\s*\.\s*getAbsoluteFile\s*\(\s*\))?\s*\.\s*(?:getCanonicalPath|getAbsolutePath|getPath|toString)\s*\(\s*\)$/;
|
|
29
|
+
const CANONICAL_CALL_RE = /\b(?:getCanonicalPath|getCanonicalFile|getAbsolutePath|getAbsoluteFile)\s*\(/;
|
|
30
|
+
const METHOD_HEADER_RE = /^\s*(?!(?:if|for|while|switch|catch|synchronized|try|else|do)\b)[^=;]*\)\s*(?:throws\s+[\w.,\s]+)?\{\s*$/;
|
|
31
|
+
/** True when `expr` ends with a path-separator fragment. */
|
|
32
|
+
function endsWithSeparator(expr) {
|
|
33
|
+
const t = expr.trim();
|
|
34
|
+
// Whole-expression string literal ending in / or \
|
|
35
|
+
if (/^"(?:[^"\\]|\\.)*[\/\\]"$/.test(t))
|
|
36
|
+
return true;
|
|
37
|
+
if (/^'(?:[^'\\]|\\.)*[\/\\]'$/.test(t))
|
|
38
|
+
return true;
|
|
39
|
+
// Concatenation ending in + File.separator / File.separatorChar
|
|
40
|
+
if (/\+\s*File\s*\.\s*(?:separator|separatorChar)\s*$/.test(t))
|
|
41
|
+
return true;
|
|
42
|
+
// Concatenation ending in + "/" or + '/' or + "\\" or + '\\'
|
|
43
|
+
if (/\+\s*"(?:\/|\\\\)"\s*$/.test(t))
|
|
44
|
+
return true;
|
|
45
|
+
if (/\+\s*'(?:\/|\\\\)'\s*$/.test(t))
|
|
46
|
+
return true;
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
/** Text of the call argument opening at `open` (index of `(`), or null when unbalanced. */
|
|
50
|
+
export function javaCallArgument(text, open) {
|
|
51
|
+
let depth = 0;
|
|
52
|
+
let quote = null;
|
|
53
|
+
for (let i = open; i < text.length; i++) {
|
|
54
|
+
const c = text[i];
|
|
55
|
+
if (quote) {
|
|
56
|
+
if (c === '\\')
|
|
57
|
+
i++;
|
|
58
|
+
else if (c === quote)
|
|
59
|
+
quote = null;
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
if (c === '"' || c === "'")
|
|
63
|
+
quote = c;
|
|
64
|
+
else if (c === '(')
|
|
65
|
+
depth++;
|
|
66
|
+
else if (c === ')' && --depth === 0)
|
|
67
|
+
return text.slice(open + 1, i).trim();
|
|
68
|
+
}
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
/** RHS of the nearest assignment to `name` above line `from`, within the enclosing method. */
|
|
72
|
+
function resolveLocal(lines, from, name) {
|
|
73
|
+
const assignRe = new RegExp(`(?:^|[^\\w.])${name}\\s*([-+*/%&|^]|<<|>>>?)?=(?!=)\\s*([^;]+);`);
|
|
74
|
+
for (let l = from - 1; l >= 0; l--) {
|
|
75
|
+
const m = assignRe.exec(lines[l]);
|
|
76
|
+
if (m) {
|
|
77
|
+
if (m[1] === undefined)
|
|
78
|
+
return m[2].trim();
|
|
79
|
+
// `base += File.separator` / `base += "X"`: fold into `prev + rhs` so
|
|
80
|
+
// trailing-separator checks still see the full expression. Other
|
|
81
|
+
// compounds stay unresolved and the guard keeps its credit.
|
|
82
|
+
if (m[1] === '+') {
|
|
83
|
+
const prev = resolveLocal(lines, l, name);
|
|
84
|
+
if (prev === null)
|
|
85
|
+
return null;
|
|
86
|
+
return `${prev} + ${m[2].trim()}`;
|
|
87
|
+
}
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
if (METHOD_HEADER_RE.test(lines[l]))
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* True when `arg` — the argument of a canonical-path `startsWith` call on line
|
|
97
|
+
* `lineIdx` (0-based) — provably evaluates to a canonical path with no
|
|
98
|
+
* trailing separator.
|
|
99
|
+
*/
|
|
100
|
+
export function javaCanonicalBaseLacksSeparator(lines, lineIdx, arg) {
|
|
101
|
+
let expr = arg.trim();
|
|
102
|
+
for (let hop = 0; hop < 3; hop++) {
|
|
103
|
+
if (endsWithSeparator(expr))
|
|
104
|
+
return false;
|
|
105
|
+
if (BARE_CANONICAL_RE.test(expr))
|
|
106
|
+
return CANONICAL_CALL_RE.test(expr);
|
|
107
|
+
// Concat / compound that still mentions a canonical call and does not end
|
|
108
|
+
// with a separator (e.g. `File.separator + path`, `path + "X"`, `path + "/foo"`).
|
|
109
|
+
if (CANONICAL_CALL_RE.test(expr))
|
|
110
|
+
return true;
|
|
111
|
+
if (!/^[A-Za-z_]\w*$/.test(expr))
|
|
112
|
+
return false;
|
|
113
|
+
const rhs = resolveLocal(lines, lineIdx, expr);
|
|
114
|
+
if (rhs === null)
|
|
115
|
+
return false;
|
|
116
|
+
expr = rhs;
|
|
117
|
+
}
|
|
118
|
+
return false;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* True when every canonical-path `startsWith(<base>)` in `text` (a method body)
|
|
122
|
+
* whose base mentions a canonical path call lacks a separator, and there is at
|
|
123
|
+
* least one such call. Used by the method-level guard check.
|
|
124
|
+
*/
|
|
125
|
+
export function javaCanonicalStartsWithAllBare(text) {
|
|
126
|
+
const lines = text.split('\n');
|
|
127
|
+
const re = /\.\s*startsWith\s*\(/g;
|
|
128
|
+
let seen = 0;
|
|
129
|
+
for (let l = 0; l < lines.length; l++) {
|
|
130
|
+
const rest = lines.slice(l).join('\n');
|
|
131
|
+
re.lastIndex = 0;
|
|
132
|
+
let m;
|
|
133
|
+
while ((m = re.exec(lines[l])) !== null) {
|
|
134
|
+
const open = m.index + m[0].length - 1;
|
|
135
|
+
const arg = javaCallArgument(rest, open);
|
|
136
|
+
if (arg === null || !/getCanonicalPath/.test(arg))
|
|
137
|
+
continue;
|
|
138
|
+
seen++;
|
|
139
|
+
if (!javaCanonicalBaseLacksSeparator(lines, l, arg))
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return seen > 0;
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=java-canonical-prefix.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"java-canonical-prefix.js","sourceRoot":"","sources":["../../src/analysis/java-canonical-prefix.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which of CR / LF a Java `String.replace` / `replaceAll` call strips as a
|
|
3
|
+
* match of its own (cognium-dev#562 / #605).
|
|
4
|
+
*
|
|
5
|
+
* Shared by the inline-chain credit (`taint-matcher.ts`) and the helper-body
|
|
6
|
+
* credit (`language-sources-pass.ts`), so a pattern is judged the same way
|
|
7
|
+
* wherever it appears.
|
|
8
|
+
*
|
|
9
|
+
* The literal is first decoded from Java source (`"\\r"` and `"\r"` both
|
|
10
|
+
* become a CR atom for the regex engine, `"\\\\r"` becomes a literal
|
|
11
|
+
* backslash followed by `r`), then the regex is read one atom at a time.
|
|
12
|
+
*/
|
|
13
|
+
/** Decode the escape sequences of the body of a Java string / char literal. */
|
|
14
|
+
export declare function decodeJavaLiteral(raw: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* CR / LF coverage of a `replace` / `replaceAll` call from the raw source text
|
|
17
|
+
* of its first literal argument (the text between the quotes).
|
|
18
|
+
*
|
|
19
|
+
* `replace` is a plain-text match: only a lone CR or LF removes one. `replaceAll`
|
|
20
|
+
* is a regex: only a top-level alternation (optionally inside one `(?:…)` /
|
|
21
|
+
* `(…)` group, which may carry a quantifier) whose alternatives are a lone
|
|
22
|
+
* `\r` / `\n` atom or a non-negated class holding one, each quantified so that
|
|
23
|
+
* a single repetition matches, removes a lone CR or LF. A longer sequence
|
|
24
|
+
* (`\r\n`, `x\r\ny`) or a negated class does not.
|
|
25
|
+
*/
|
|
26
|
+
export declare function javaReplaceCrLfCoverage(method: 'replace' | 'replaceAll', rawFrom: string): {
|
|
27
|
+
cr: boolean;
|
|
28
|
+
lf: boolean;
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=java-crlf-strip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"java-crlf-strip.d.ts","sourceRoot":"","sources":["../../src/analysis/java-crlf-strip.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,+EAA+E;AAC/E,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAcrD;AA+FD;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,GAAG,YAAY,EAChC,OAAO,EAAE,MAAM,GACd;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,OAAO,CAAA;CAAE,CAiB9B"}
|