cognium-dev 4.9.8 → 4.9.10
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/dist/cli.js +280 -190
- package/package.json +3 -3
package/dist/cli.js
CHANGED
|
@@ -3232,7 +3232,7 @@ var Query = class {
|
|
|
3232
3232
|
}
|
|
3233
3233
|
};
|
|
3234
3234
|
|
|
3235
|
-
//
|
|
3235
|
+
// node_modules/circle-ir/dist/core/parser.js
|
|
3236
3236
|
var nodeModules = null;
|
|
3237
3237
|
var moduleDir = null;
|
|
3238
3238
|
async function getNodeModules() {
|
|
@@ -3472,7 +3472,7 @@ async function getDefaultLanguagePath(language) {
|
|
|
3472
3472
|
}
|
|
3473
3473
|
return `wasm/tree-sitter-${language}.wasm`;
|
|
3474
3474
|
}
|
|
3475
|
-
//
|
|
3475
|
+
// node_modules/circle-ir/dist/core/extractors/meta.js
|
|
3476
3476
|
function extractMeta(code, tree, filePath, language) {
|
|
3477
3477
|
const loc = countLinesOfCode(code);
|
|
3478
3478
|
const hash = computeHash(code);
|
|
@@ -3554,7 +3554,7 @@ function extractPackage(tree, language) {
|
|
|
3554
3554
|
}
|
|
3555
3555
|
return null;
|
|
3556
3556
|
}
|
|
3557
|
-
//
|
|
3557
|
+
// node_modules/circle-ir/dist/core/extractors/types.js
|
|
3558
3558
|
function detectLanguage(tree) {
|
|
3559
3559
|
const root = tree.rootNode;
|
|
3560
3560
|
const jsNodeTypes = new Set([
|
|
@@ -5222,7 +5222,7 @@ function findChildByType(node, type) {
|
|
|
5222
5222
|
}
|
|
5223
5223
|
return null;
|
|
5224
5224
|
}
|
|
5225
|
-
//
|
|
5225
|
+
// node_modules/circle-ir/dist/core/extractors/calls.js
|
|
5226
5226
|
function detectLanguageFromTree(tree, cache) {
|
|
5227
5227
|
const rustStructs = getNodesFromCache(tree.rootNode, "struct_item", cache);
|
|
5228
5228
|
const rustImpls = getNodesFromCache(tree.rootNode, "impl_item", cache);
|
|
@@ -7274,7 +7274,7 @@ function extractGoTypeLastSegment(typeNode) {
|
|
|
7274
7274
|
}
|
|
7275
7275
|
return null;
|
|
7276
7276
|
}
|
|
7277
|
-
//
|
|
7277
|
+
// node_modules/circle-ir/dist/core/extractors/imports.js
|
|
7278
7278
|
function detectLanguage2(tree) {
|
|
7279
7279
|
const root = tree.rootNode;
|
|
7280
7280
|
const jsNodeTypes = new Set([
|
|
@@ -7961,7 +7961,7 @@ function findGoChildByType(node, type) {
|
|
|
7961
7961
|
}
|
|
7962
7962
|
return null;
|
|
7963
7963
|
}
|
|
7964
|
-
//
|
|
7964
|
+
// node_modules/circle-ir/dist/core/extractors/exports.js
|
|
7965
7965
|
function extractExports(types) {
|
|
7966
7966
|
const exports = [];
|
|
7967
7967
|
for (const type of types) {
|
|
@@ -8014,7 +8014,7 @@ function getVisibilityFromModifiers(modifiers) {
|
|
|
8014
8014
|
}
|
|
8015
8015
|
return "package";
|
|
8016
8016
|
}
|
|
8017
|
-
//
|
|
8017
|
+
// node_modules/circle-ir/dist/core/extractors/cfg.js
|
|
8018
8018
|
function detectLanguage3(tree) {
|
|
8019
8019
|
const root = tree.rootNode;
|
|
8020
8020
|
const jsNodeTypes = new Set([
|
|
@@ -8663,7 +8663,7 @@ function isGoStatement(node) {
|
|
|
8663
8663
|
]);
|
|
8664
8664
|
return goStatementTypes.has(node.type);
|
|
8665
8665
|
}
|
|
8666
|
-
//
|
|
8666
|
+
// node_modules/circle-ir/dist/core/extractors/dfg.js
|
|
8667
8667
|
function detectLanguage4(tree) {
|
|
8668
8668
|
const root = tree.rootNode;
|
|
8669
8669
|
const jsNodeTypes = new Set([
|
|
@@ -10184,7 +10184,7 @@ function extractGoAddressableVarName(node) {
|
|
|
10184
10184
|
}
|
|
10185
10185
|
return null;
|
|
10186
10186
|
}
|
|
10187
|
-
//
|
|
10187
|
+
// node_modules/circle-ir/dist/core/extractors/runtime-registrations.js
|
|
10188
10188
|
var HTTP_VERB_METHODS = new Set([
|
|
10189
10189
|
"get",
|
|
10190
10190
|
"post",
|
|
@@ -10932,7 +10932,7 @@ function parseDistributedSliceAttribute(attrItem) {
|
|
|
10932
10932
|
}
|
|
10933
10933
|
};
|
|
10934
10934
|
}
|
|
10935
|
-
//
|
|
10935
|
+
// node_modules/circle-ir/dist/analysis/config-loader.js
|
|
10936
10936
|
var DEFAULT_SOURCES = [
|
|
10937
10937
|
{ method: "getParameter", class: "HttpServletRequest", type: "http_param", severity: "high", return_tainted: true },
|
|
10938
10938
|
{ method: "getParameterValues", class: "HttpServletRequest", type: "http_param", severity: "high", return_tainted: true },
|
|
@@ -13011,7 +13011,7 @@ var DEFAULT_HEADER_RULES = [
|
|
|
13011
13011
|
note: "Fires when the value is not a string literal (likely reflected from request)"
|
|
13012
13012
|
}
|
|
13013
13013
|
];
|
|
13014
|
-
//
|
|
13014
|
+
// node_modules/circle-ir/dist/analysis/arg-type-resolver.js
|
|
13015
13015
|
function findEnclosingType(callInMethod, types) {
|
|
13016
13016
|
if (!callInMethod)
|
|
13017
13017
|
return null;
|
|
@@ -13089,7 +13089,7 @@ function isArgvContainerType(rawType) {
|
|
|
13089
13089
|
return /^(?:List|ArrayList|LinkedList|Collection|Iterable|Deque|Queue)\s*<\s*(?:String|CharSequence|java\.lang\.String)\b/.test(s);
|
|
13090
13090
|
}
|
|
13091
13091
|
|
|
13092
|
-
//
|
|
13092
|
+
// node_modules/circle-ir/dist/analysis/taint-matcher.js
|
|
13093
13093
|
var PYTHON_TAINTED_PATTERNS = [
|
|
13094
13094
|
{ pattern: /\brequest\.args\b/, sourceType: "http_param" },
|
|
13095
13095
|
{ pattern: /\brequest\.form\b/, sourceType: "http_body" },
|
|
@@ -13764,17 +13764,27 @@ function isSafeCSharpProcessStartCall(call, pattern, language, sourceLines) {
|
|
|
13764
13764
|
function stripCsLiterals(line) {
|
|
13765
13765
|
return line.replace(/\/\/.*$/, "").replace(/@?"(?:[^"\\]|\\.)*"/g, '""').replace(/'(?:[^'\\]|\\.)'/g, "''");
|
|
13766
13766
|
}
|
|
13767
|
+
var _csDepthLines;
|
|
13768
|
+
var _csDepthPrefix;
|
|
13767
13769
|
function csBraceDepthBefore(lines, idx) {
|
|
13768
|
-
|
|
13769
|
-
|
|
13770
|
-
|
|
13771
|
-
|
|
13772
|
-
|
|
13773
|
-
|
|
13774
|
-
|
|
13770
|
+
if (lines !== _csDepthLines) {
|
|
13771
|
+
const pref = new Int32Array(lines.length + 1);
|
|
13772
|
+
let depth = 0;
|
|
13773
|
+
for (let i2 = 0;i2 < lines.length; i2++) {
|
|
13774
|
+
pref[i2] = depth;
|
|
13775
|
+
for (const ch of stripCsLiterals(lines[i2])) {
|
|
13776
|
+
if (ch === "{")
|
|
13777
|
+
depth++;
|
|
13778
|
+
else if (ch === "}")
|
|
13779
|
+
depth--;
|
|
13780
|
+
}
|
|
13775
13781
|
}
|
|
13782
|
+
pref[lines.length] = depth;
|
|
13783
|
+
_csDepthLines = lines;
|
|
13784
|
+
_csDepthPrefix = pref;
|
|
13776
13785
|
}
|
|
13777
|
-
|
|
13786
|
+
const clamped = idx < 0 ? 0 : idx > lines.length ? lines.length : idx;
|
|
13787
|
+
return _csDepthPrefix[clamped];
|
|
13778
13788
|
}
|
|
13779
13789
|
function netBraces(fragment) {
|
|
13780
13790
|
let n = 0;
|
|
@@ -13885,6 +13895,33 @@ function csThenBlock(lines, ifIdx, rest) {
|
|
|
13885
13895
|
}
|
|
13886
13896
|
return { start: ifIdx, end: firstIdx, earlyExit: isExit(firstText.trim()) };
|
|
13887
13897
|
}
|
|
13898
|
+
var _csGuardLines;
|
|
13899
|
+
var _csGuardMap;
|
|
13900
|
+
function csEqualityGuardIndex(lines) {
|
|
13901
|
+
if (lines === _csGuardLines && _csGuardMap)
|
|
13902
|
+
return _csGuardMap;
|
|
13903
|
+
const map = new Map;
|
|
13904
|
+
for (let i2 = 0;i2 < lines.length; i2++) {
|
|
13905
|
+
const parts2 = splitCsIf(lines[i2]);
|
|
13906
|
+
if (!parts2)
|
|
13907
|
+
continue;
|
|
13908
|
+
const guard = csEqualityGuard(parts2.cond);
|
|
13909
|
+
if (!guard)
|
|
13910
|
+
continue;
|
|
13911
|
+
const entry = { i: i2, rest: parts2.rest, ifCol: parts2.ifCol, op: guard.op };
|
|
13912
|
+
for (const id of csIdentifiers(guard.exprSide)) {
|
|
13913
|
+
let arr = map.get(id);
|
|
13914
|
+
if (!arr) {
|
|
13915
|
+
arr = [];
|
|
13916
|
+
map.set(id, arr);
|
|
13917
|
+
}
|
|
13918
|
+
arr.push(entry);
|
|
13919
|
+
}
|
|
13920
|
+
}
|
|
13921
|
+
_csGuardLines = lines;
|
|
13922
|
+
_csGuardMap = map;
|
|
13923
|
+
return map;
|
|
13924
|
+
}
|
|
13888
13925
|
function isCSharpSsrfHostAllowlistGuarded(call, pattern, language, sourceLines) {
|
|
13889
13926
|
if (language !== "csharp")
|
|
13890
13927
|
return false;
|
|
@@ -13903,24 +13940,25 @@ function isCSharpSsrfHostAllowlistGuarded(call, pattern, language, sourceLines)
|
|
|
13903
13940
|
return false;
|
|
13904
13941
|
const sinkIdx = call.location.line - 1;
|
|
13905
13942
|
const sinkDepth = csBraceDepthBefore(sourceLines, sinkIdx);
|
|
13906
|
-
|
|
13907
|
-
|
|
13908
|
-
|
|
13909
|
-
|
|
13910
|
-
|
|
13911
|
-
|
|
13912
|
-
|
|
13913
|
-
|
|
13914
|
-
|
|
13915
|
-
|
|
13916
|
-
|
|
13917
|
-
|
|
13918
|
-
|
|
13919
|
-
|
|
13920
|
-
|
|
13921
|
-
|
|
13922
|
-
|
|
13923
|
-
|
|
13943
|
+
const guardMap = csEqualityGuardIndex(sourceLines);
|
|
13944
|
+
const checked = new Set;
|
|
13945
|
+
for (const cand of candidates) {
|
|
13946
|
+
const guards = guardMap.get(cand);
|
|
13947
|
+
if (!guards)
|
|
13948
|
+
continue;
|
|
13949
|
+
for (const g of guards) {
|
|
13950
|
+
if (g.i >= sinkIdx || checked.has(g))
|
|
13951
|
+
continue;
|
|
13952
|
+
checked.add(g);
|
|
13953
|
+
const block = csThenBlock(sourceLines, g.i, g.rest);
|
|
13954
|
+
if (g.op === "==") {
|
|
13955
|
+
if (sinkIdx >= block.start && sinkIdx <= block.end)
|
|
13956
|
+
return true;
|
|
13957
|
+
} else {
|
|
13958
|
+
const guardDepth = csBraceDepthBefore(sourceLines, g.i) + netBraces(stripCsLiterals(sourceLines[g.i]).slice(0, g.ifCol));
|
|
13959
|
+
if (block.earlyExit && sinkIdx > block.end && guardDepth === sinkDepth) {
|
|
13960
|
+
return true;
|
|
13961
|
+
}
|
|
13924
13962
|
}
|
|
13925
13963
|
}
|
|
13926
13964
|
}
|
|
@@ -15056,7 +15094,7 @@ function formatSanitizerMethod(call) {
|
|
|
15056
15094
|
return `${call.method_name}()`;
|
|
15057
15095
|
}
|
|
15058
15096
|
|
|
15059
|
-
//
|
|
15097
|
+
// node_modules/circle-ir/dist/analysis/unresolved.js
|
|
15060
15098
|
function detectUnresolved(calls, types, dfg) {
|
|
15061
15099
|
const unresolved = [];
|
|
15062
15100
|
unresolved.push(...detectVirtualDispatch(calls));
|
|
@@ -15220,7 +15258,7 @@ function formatCallCode(call) {
|
|
|
15220
15258
|
}
|
|
15221
15259
|
return `${call.method_name}(${args2})`;
|
|
15222
15260
|
}
|
|
15223
|
-
//
|
|
15261
|
+
// node_modules/circle-ir/dist/analysis/non-executable-lines.js
|
|
15224
15262
|
function isNonExecutableSourceLine(sourceCode, line, language) {
|
|
15225
15263
|
if (!sourceCode || line < 1)
|
|
15226
15264
|
return false;
|
|
@@ -15280,7 +15318,7 @@ function isNonExecutablePython(trimmed) {
|
|
|
15280
15318
|
return false;
|
|
15281
15319
|
}
|
|
15282
15320
|
|
|
15283
|
-
//
|
|
15321
|
+
// node_modules/circle-ir/dist/analysis/sanitizer-index.js
|
|
15284
15322
|
var SANITIZER_SET_CACHE = new WeakMap;
|
|
15285
15323
|
function getSanitizesSet(san) {
|
|
15286
15324
|
let s = SANITIZER_SET_CACHE.get(san);
|
|
@@ -15294,7 +15332,7 @@ function sanitizerCoversSink(san, sinkType) {
|
|
|
15294
15332
|
return getSanitizesSet(san).has(sinkType);
|
|
15295
15333
|
}
|
|
15296
15334
|
|
|
15297
|
-
//
|
|
15335
|
+
// node_modules/circle-ir/dist/analysis/dfg-walk.js
|
|
15298
15336
|
var walkBackwardDefsMemo = new WeakMap;
|
|
15299
15337
|
function walkBackwardDefs(startDefId, chainsByToDef, defById, options = {}) {
|
|
15300
15338
|
const maxHops = options.maxHops ?? 32;
|
|
@@ -15347,7 +15385,7 @@ function walkBackwardDefs(startDefId, chainsByToDef, defById, options = {}) {
|
|
|
15347
15385
|
return result;
|
|
15348
15386
|
}
|
|
15349
15387
|
|
|
15350
|
-
//
|
|
15388
|
+
// node_modules/circle-ir/dist/analysis/findings.js
|
|
15351
15389
|
function canSourceReachSink(sourceType, sinkType) {
|
|
15352
15390
|
const sourceToSinkMapping = {
|
|
15353
15391
|
http_param: ["sql_injection", "command_injection", "path_traversal", "xss", "xpath_injection", "ldap_injection", "ssrf", "mybatis_mapper_call", "code_injection", "crlf", "mass_assignment", "open_redirect", "trust_boundary", "deserialization", "log_injection", "format_string", "nosql_injection", "prompt_injection"],
|
|
@@ -15378,7 +15416,7 @@ function sourceSemanticsAllowed(source, sinkType) {
|
|
|
15378
15416
|
return true;
|
|
15379
15417
|
}
|
|
15380
15418
|
|
|
15381
|
-
//
|
|
15419
|
+
// node_modules/circle-ir/dist/analysis/findings-instrumentation.js
|
|
15382
15420
|
var instrumentEnabled = false;
|
|
15383
15421
|
function setFindingsInstrumentation(enabled) {
|
|
15384
15422
|
instrumentEnabled = enabled;
|
|
@@ -15441,7 +15479,7 @@ function emitFindingsInstrumentation(filePath, findings, taint) {
|
|
|
15441
15479
|
};
|
|
15442
15480
|
console.error(`[findings-summary] ${JSON.stringify(summary)}`);
|
|
15443
15481
|
}
|
|
15444
|
-
//
|
|
15482
|
+
// node_modules/circle-ir/dist/graph/code-graph.js
|
|
15445
15483
|
class CodeGraph {
|
|
15446
15484
|
ir;
|
|
15447
15485
|
constructor(ir) {
|
|
@@ -15651,7 +15689,7 @@ class CodeGraph {
|
|
|
15651
15689
|
return result;
|
|
15652
15690
|
}
|
|
15653
15691
|
}
|
|
15654
|
-
//
|
|
15692
|
+
// node_modules/circle-ir/dist/resolution/type-hierarchy.js
|
|
15655
15693
|
class TypeHierarchyResolver {
|
|
15656
15694
|
types = new Map;
|
|
15657
15695
|
nameToFqn = new Map;
|
|
@@ -16223,7 +16261,7 @@ function registerCommonLibraries(resolver) {
|
|
|
16223
16261
|
resolver.registerFactoryReturnType("HttpClients", "createSystem", "org.apache.http.impl.client.CloseableHttpClient");
|
|
16224
16262
|
resolver.registerFactoryReturnType("HttpClients", "createMinimal", "org.apache.http.impl.client.MinimalHttpClient");
|
|
16225
16263
|
}
|
|
16226
|
-
//
|
|
16264
|
+
// node_modules/circle-ir/dist/resolution/symbol-table.js
|
|
16227
16265
|
class SymbolTable {
|
|
16228
16266
|
exports = new Map;
|
|
16229
16267
|
nameToFqns = new Map;
|
|
@@ -16446,7 +16484,7 @@ class SymbolTable {
|
|
|
16446
16484
|
return "package";
|
|
16447
16485
|
}
|
|
16448
16486
|
}
|
|
16449
|
-
//
|
|
16487
|
+
// node_modules/circle-ir/dist/resolution/cross-file.js
|
|
16450
16488
|
function buildFileIndex(ir) {
|
|
16451
16489
|
const callsByLine = new Map;
|
|
16452
16490
|
for (const c of ir.calls) {
|
|
@@ -17534,7 +17572,7 @@ class CrossFileResolver {
|
|
|
17534
17572
|
return this.fieldTaintInfo.get(`${typeFqn}.${fieldName}`);
|
|
17535
17573
|
}
|
|
17536
17574
|
}
|
|
17537
|
-
//
|
|
17575
|
+
// node_modules/circle-ir/dist/graph/project-graph.js
|
|
17538
17576
|
class ProjectGraph {
|
|
17539
17577
|
files = new Map;
|
|
17540
17578
|
_symbolTable = null;
|
|
@@ -17586,7 +17624,7 @@ class ProjectGraph {
|
|
|
17586
17624
|
return this._resolver;
|
|
17587
17625
|
}
|
|
17588
17626
|
}
|
|
17589
|
-
//
|
|
17627
|
+
// node_modules/circle-ir/dist/graph/analysis-pass.js
|
|
17590
17628
|
class AnalysisPipeline {
|
|
17591
17629
|
passes = [];
|
|
17592
17630
|
add(pass) {
|
|
@@ -17633,7 +17671,7 @@ class AnalysisPipeline {
|
|
|
17633
17671
|
return { results, findings };
|
|
17634
17672
|
}
|
|
17635
17673
|
}
|
|
17636
|
-
//
|
|
17674
|
+
// node_modules/circle-ir/dist/analysis/taint-propagation.js
|
|
17637
17675
|
function buildSanitizersByLine(sanitizers) {
|
|
17638
17676
|
const out2 = new Map;
|
|
17639
17677
|
for (const san of sanitizers) {
|
|
@@ -17932,7 +17970,7 @@ function buildTaintFlow(source, sink, taintInfo) {
|
|
|
17932
17970
|
confidence: taintInfo.confidence * 0.9
|
|
17933
17971
|
};
|
|
17934
17972
|
}
|
|
17935
|
-
//
|
|
17973
|
+
// node_modules/circle-ir/dist/analysis/constant-propagation/ast-utils.js
|
|
17936
17974
|
function isKnown(cv) {
|
|
17937
17975
|
return cv.type !== "unknown";
|
|
17938
17976
|
}
|
|
@@ -17949,7 +17987,7 @@ function getNodeLine(node) {
|
|
|
17949
17987
|
return node.startPosition.row + 1;
|
|
17950
17988
|
}
|
|
17951
17989
|
|
|
17952
|
-
//
|
|
17990
|
+
// node_modules/circle-ir/dist/analysis/constant-propagation/evaluator.js
|
|
17953
17991
|
class ExpressionEvaluator {
|
|
17954
17992
|
source;
|
|
17955
17993
|
getSymbol;
|
|
@@ -18219,7 +18257,7 @@ class ExpressionEvaluator {
|
|
|
18219
18257
|
}
|
|
18220
18258
|
}
|
|
18221
18259
|
|
|
18222
|
-
//
|
|
18260
|
+
// node_modules/circle-ir/dist/analysis/constant-propagation/patterns.js
|
|
18223
18261
|
var TAINT_PATTERNS = [
|
|
18224
18262
|
"request.getParameter",
|
|
18225
18263
|
"request.getHeader",
|
|
@@ -18414,7 +18452,7 @@ var PROPAGATOR_METHODS = new Set([
|
|
|
18414
18452
|
"decodeRequestString"
|
|
18415
18453
|
]);
|
|
18416
18454
|
|
|
18417
|
-
//
|
|
18455
|
+
// node_modules/circle-ir/dist/analysis/constant-propagation/propagator.js
|
|
18418
18456
|
class ConstantPropagator {
|
|
18419
18457
|
symbols = new Map;
|
|
18420
18458
|
tainted = new Set;
|
|
@@ -20271,7 +20309,7 @@ class ConstantPropagator {
|
|
|
20271
20309
|
}
|
|
20272
20310
|
}
|
|
20273
20311
|
|
|
20274
|
-
//
|
|
20312
|
+
// node_modules/circle-ir/dist/analysis/constant-propagation/index.js
|
|
20275
20313
|
function analyzeConstantPropagation(tree, sourceCode, options = {}) {
|
|
20276
20314
|
const propagator = new ConstantPropagator;
|
|
20277
20315
|
return propagator.analyze(tree, sourceCode, options.additionalTaintPatterns ?? [], options.sanitizerMethods ?? [], options.taintedParameters ?? []);
|
|
@@ -20359,7 +20397,7 @@ function normalizeCondition(cond) {
|
|
|
20359
20397
|
}
|
|
20360
20398
|
return normalized;
|
|
20361
20399
|
}
|
|
20362
|
-
//
|
|
20400
|
+
// node_modules/circle-ir/dist/utils/logger.js
|
|
20363
20401
|
var LOG_LEVELS = {
|
|
20364
20402
|
trace: 0,
|
|
20365
20403
|
debug: 1,
|
|
@@ -20431,7 +20469,7 @@ var logger = {
|
|
|
20431
20469
|
}
|
|
20432
20470
|
};
|
|
20433
20471
|
|
|
20434
|
-
//
|
|
20472
|
+
// node_modules/circle-ir/dist/analysis/per-file-finding-cap.js
|
|
20435
20473
|
var DEFAULT_PER_FILE_FINDING_CAP = 1000;
|
|
20436
20474
|
var SATURATED_FILE_RULE_ID = "saturated-file";
|
|
20437
20475
|
function applyPerFileFindingCap(filePath, findings, cap) {
|
|
@@ -20467,7 +20505,7 @@ function applyPerFileFindingCap(filePath, findings, cap) {
|
|
|
20467
20505
|
return [advisory];
|
|
20468
20506
|
}
|
|
20469
20507
|
|
|
20470
|
-
//
|
|
20508
|
+
// node_modules/circle-ir/dist/analysis/confidence-filter.js
|
|
20471
20509
|
function applyConfidenceFilter(findings, includeSpeculative) {
|
|
20472
20510
|
if (includeSpeculative)
|
|
20473
20511
|
return findings;
|
|
@@ -20477,7 +20515,7 @@ function isHighConfidence(finding) {
|
|
|
20477
20515
|
return finding.confidence === undefined || finding.confidence === "high";
|
|
20478
20516
|
}
|
|
20479
20517
|
|
|
20480
|
-
//
|
|
20518
|
+
// node_modules/circle-ir/dist/analysis/library-api-surface-downgrade.js
|
|
20481
20519
|
var LIBRARY_API_SURFACE_TAG = "library-api-surface:caller-responsibility";
|
|
20482
20520
|
function applyLibraryApiSurfaceDowngrade(findings) {
|
|
20483
20521
|
return findings.map((f) => {
|
|
@@ -20494,7 +20532,7 @@ function applyLibraryApiSurfaceDowngrade(findings) {
|
|
|
20494
20532
|
});
|
|
20495
20533
|
}
|
|
20496
20534
|
|
|
20497
|
-
//
|
|
20535
|
+
// node_modules/circle-ir/dist/analysis/note-coalescer.js
|
|
20498
20536
|
var CLICKJACKING_PAIR = new Set(["missing-x-frame-options", "missing-csp-frame-ancestors"]);
|
|
20499
20537
|
function levelRank(level) {
|
|
20500
20538
|
return level === "error" ? 0 : level === "warning" ? 1 : 2;
|
|
@@ -20558,7 +20596,7 @@ function coalesceNoteLevelFindings(findings) {
|
|
|
20558
20596
|
return out2;
|
|
20559
20597
|
}
|
|
20560
20598
|
|
|
20561
|
-
//
|
|
20599
|
+
// node_modules/circle-ir/dist/analysis/entry-point-detection.js
|
|
20562
20600
|
var TIER_1_METHOD_ANNOTATIONS = new Set([
|
|
20563
20601
|
"RequestMapping",
|
|
20564
20602
|
"GetMapping",
|
|
@@ -21215,7 +21253,7 @@ function methodIsRuntimeRegistrationHandler(method, regs) {
|
|
|
21215
21253
|
return false;
|
|
21216
21254
|
}
|
|
21217
21255
|
|
|
21218
|
-
//
|
|
21256
|
+
// node_modules/circle-ir/dist/analysis/require-entry-path.js
|
|
21219
21257
|
var RULE_ID_REQUIRE_ENTRY_PATH = "require-entry-path";
|
|
21220
21258
|
var MAX_VISITED_METHODS = 2000;
|
|
21221
21259
|
var TAINT_FLOW_RULE_IDS = new Set([
|
|
@@ -21604,7 +21642,7 @@ function normalizeDisabled(input) {
|
|
|
21604
21642
|
return new Set(input);
|
|
21605
21643
|
}
|
|
21606
21644
|
|
|
21607
|
-
//
|
|
21645
|
+
// node_modules/circle-ir/dist/analysis/project-profile-transform.js
|
|
21608
21646
|
var DOWNGRADE_ELIGIBLE_RULE_IDS = new Set([
|
|
21609
21647
|
"code_injection",
|
|
21610
21648
|
"template_injection",
|
|
@@ -21666,7 +21704,7 @@ function applyProjectProfileTransform(findings, resolveProfile) {
|
|
|
21666
21704
|
});
|
|
21667
21705
|
}
|
|
21668
21706
|
|
|
21669
|
-
//
|
|
21707
|
+
// node_modules/circle-ir/dist/languages/registry.js
|
|
21670
21708
|
class DefaultLanguageRegistry {
|
|
21671
21709
|
plugins = new Map;
|
|
21672
21710
|
extensionMap = new Map;
|
|
@@ -21713,7 +21751,7 @@ function registerLanguage(plugin) {
|
|
|
21713
21751
|
function getLanguagePlugin(language) {
|
|
21714
21752
|
return getLanguageRegistry().get(language);
|
|
21715
21753
|
}
|
|
21716
|
-
//
|
|
21754
|
+
// node_modules/circle-ir/dist/languages/plugins/base.js
|
|
21717
21755
|
class BaseLanguagePlugin {
|
|
21718
21756
|
parser = null;
|
|
21719
21757
|
async initialize(parser) {
|
|
@@ -21774,7 +21812,7 @@ class BaseLanguagePlugin {
|
|
|
21774
21812
|
}
|
|
21775
21813
|
}
|
|
21776
21814
|
|
|
21777
|
-
//
|
|
21815
|
+
// node_modules/circle-ir/dist/languages/plugins/java.js
|
|
21778
21816
|
class JavaPlugin extends BaseLanguagePlugin {
|
|
21779
21817
|
id = "java";
|
|
21780
21818
|
name = "Java";
|
|
@@ -22031,7 +22069,7 @@ class JavaPlugin extends BaseLanguagePlugin {
|
|
|
22031
22069
|
}
|
|
22032
22070
|
}
|
|
22033
22071
|
|
|
22034
|
-
//
|
|
22072
|
+
// node_modules/circle-ir/dist/languages/plugins/javascript.js
|
|
22035
22073
|
class JavaScriptPlugin extends BaseLanguagePlugin {
|
|
22036
22074
|
id = "javascript";
|
|
22037
22075
|
name = "JavaScript/TypeScript";
|
|
@@ -22697,7 +22735,7 @@ class JavaScriptPlugin extends BaseLanguagePlugin {
|
|
|
22697
22735
|
}
|
|
22698
22736
|
}
|
|
22699
22737
|
|
|
22700
|
-
//
|
|
22738
|
+
// node_modules/circle-ir/dist/languages/plugins/python.js
|
|
22701
22739
|
class PythonPlugin extends BaseLanguagePlugin {
|
|
22702
22740
|
id = "python";
|
|
22703
22741
|
name = "Python";
|
|
@@ -22973,7 +23011,7 @@ class PythonPlugin extends BaseLanguagePlugin {
|
|
|
22973
23011
|
}
|
|
22974
23012
|
}
|
|
22975
23013
|
|
|
22976
|
-
//
|
|
23014
|
+
// node_modules/circle-ir/dist/languages/plugins/rust.js
|
|
22977
23015
|
class RustPlugin extends BaseLanguagePlugin {
|
|
22978
23016
|
id = "rust";
|
|
22979
23017
|
name = "Rust";
|
|
@@ -23213,7 +23251,7 @@ class RustPlugin extends BaseLanguagePlugin {
|
|
|
23213
23251
|
}
|
|
23214
23252
|
}
|
|
23215
23253
|
|
|
23216
|
-
//
|
|
23254
|
+
// node_modules/circle-ir/dist/languages/plugins/bash.js
|
|
23217
23255
|
class BashPlugin extends BaseLanguagePlugin {
|
|
23218
23256
|
id = "bash";
|
|
23219
23257
|
name = "Bash/Shell";
|
|
@@ -23419,7 +23457,7 @@ class BashPlugin extends BaseLanguagePlugin {
|
|
|
23419
23457
|
}
|
|
23420
23458
|
}
|
|
23421
23459
|
|
|
23422
|
-
//
|
|
23460
|
+
// node_modules/circle-ir/dist/languages/plugins/html.js
|
|
23423
23461
|
class HtmlPlugin extends BaseLanguagePlugin {
|
|
23424
23462
|
id = "html";
|
|
23425
23463
|
name = "HTML";
|
|
@@ -23484,7 +23522,7 @@ class HtmlPlugin extends BaseLanguagePlugin {
|
|
|
23484
23522
|
}
|
|
23485
23523
|
}
|
|
23486
23524
|
|
|
23487
|
-
//
|
|
23525
|
+
// node_modules/circle-ir/dist/languages/plugins/vue.js
|
|
23488
23526
|
class VuePlugin extends BaseLanguagePlugin {
|
|
23489
23527
|
id = "vue";
|
|
23490
23528
|
name = "Vue";
|
|
@@ -23549,7 +23587,7 @@ class VuePlugin extends BaseLanguagePlugin {
|
|
|
23549
23587
|
}
|
|
23550
23588
|
}
|
|
23551
23589
|
|
|
23552
|
-
//
|
|
23590
|
+
// node_modules/circle-ir/dist/languages/plugins/go.js
|
|
23553
23591
|
class GoPlugin extends BaseLanguagePlugin {
|
|
23554
23592
|
id = "go";
|
|
23555
23593
|
name = "Go";
|
|
@@ -24198,7 +24236,7 @@ class GoPlugin extends BaseLanguagePlugin {
|
|
|
24198
24236
|
}
|
|
24199
24237
|
}
|
|
24200
24238
|
|
|
24201
|
-
//
|
|
24239
|
+
// node_modules/circle-ir/dist/languages/plugins/csharp.js
|
|
24202
24240
|
class CSharpPlugin extends BaseLanguagePlugin {
|
|
24203
24241
|
id = "csharp";
|
|
24204
24242
|
name = "C#";
|
|
@@ -24257,7 +24295,7 @@ class CSharpPlugin extends BaseLanguagePlugin {
|
|
|
24257
24295
|
}
|
|
24258
24296
|
}
|
|
24259
24297
|
|
|
24260
|
-
//
|
|
24298
|
+
// node_modules/circle-ir/dist/languages/plugins/index.js
|
|
24261
24299
|
function registerBuiltinPlugins() {
|
|
24262
24300
|
registerLanguage(new JavaPlugin);
|
|
24263
24301
|
registerLanguage(new JavaScriptPlugin);
|
|
@@ -24269,7 +24307,7 @@ function registerBuiltinPlugins() {
|
|
|
24269
24307
|
registerLanguage(new GoPlugin);
|
|
24270
24308
|
registerLanguage(new CSharpPlugin);
|
|
24271
24309
|
}
|
|
24272
|
-
//
|
|
24310
|
+
// node_modules/circle-ir/dist/analysis/passes/cross-file-pass.js
|
|
24273
24311
|
class CrossFilePass {
|
|
24274
24312
|
run(projectGraph, sourceLines, options = {}) {
|
|
24275
24313
|
const resolver = projectGraph.resolver;
|
|
@@ -24595,7 +24633,7 @@ function findCrossInstanceAliasingPaths(projectGraph, _sourceLines) {
|
|
|
24595
24633
|
return paths;
|
|
24596
24634
|
}
|
|
24597
24635
|
|
|
24598
|
-
//
|
|
24636
|
+
// node_modules/circle-ir/dist/analysis/html/html-extractor.js
|
|
24599
24637
|
var EVENT_HANDLER_ATTRS = new Set([
|
|
24600
24638
|
"onclick",
|
|
24601
24639
|
"ondblclick",
|
|
@@ -24750,7 +24788,7 @@ function stripQuotes2(text) {
|
|
|
24750
24788
|
return text;
|
|
24751
24789
|
}
|
|
24752
24790
|
|
|
24753
|
-
//
|
|
24791
|
+
// node_modules/circle-ir/dist/analysis/html/html-attribute-security-pass.js
|
|
24754
24792
|
function runHtmlAttributeSecurityChecks(rootNode, filePath) {
|
|
24755
24793
|
const findings = [];
|
|
24756
24794
|
walkForSecurityChecks(rootNode, filePath, findings);
|
|
@@ -24976,7 +25014,7 @@ function truncate(s, maxLen) {
|
|
|
24976
25014
|
return s.length > maxLen ? s.slice(0, maxLen) + "..." : s;
|
|
24977
25015
|
}
|
|
24978
25016
|
|
|
24979
|
-
//
|
|
25017
|
+
// node_modules/circle-ir/dist/analysis/html/vue-template-xss-pass.js
|
|
24980
25018
|
var DANGEROUS_BINDINGS = new Set([
|
|
24981
25019
|
"v-html",
|
|
24982
25020
|
"v-bind:innerhtml",
|
|
@@ -25096,7 +25134,7 @@ function collectTaintedNames(blocks) {
|
|
|
25096
25134
|
return names;
|
|
25097
25135
|
}
|
|
25098
25136
|
|
|
25099
|
-
//
|
|
25137
|
+
// node_modules/circle-ir/dist/analysis/html/html-merge.js
|
|
25100
25138
|
function mergeHtmlResults(htmlMeta, scriptResults, attributeFindings) {
|
|
25101
25139
|
const allTypes = [];
|
|
25102
25140
|
const allCalls = [];
|
|
@@ -25246,7 +25284,7 @@ function mergeHtmlResults(htmlMeta, scriptResults, attributeFindings) {
|
|
|
25246
25284
|
};
|
|
25247
25285
|
}
|
|
25248
25286
|
|
|
25249
|
-
//
|
|
25287
|
+
// node_modules/circle-ir/dist/analysis/passes/taint-matcher-pass.js
|
|
25250
25288
|
class TaintMatcherPass {
|
|
25251
25289
|
name = "taint-matcher";
|
|
25252
25290
|
category = "security";
|
|
@@ -25307,7 +25345,7 @@ class TaintMatcherPass {
|
|
|
25307
25345
|
}
|
|
25308
25346
|
}
|
|
25309
25347
|
|
|
25310
|
-
//
|
|
25348
|
+
// node_modules/circle-ir/dist/analysis/passes/constant-propagation-pass.js
|
|
25311
25349
|
class ConstantPropagationPass {
|
|
25312
25350
|
tree;
|
|
25313
25351
|
name = "constant-propagation";
|
|
@@ -25337,7 +25375,7 @@ class ConstantPropagationPass {
|
|
|
25337
25375
|
}
|
|
25338
25376
|
}
|
|
25339
25377
|
|
|
25340
|
-
//
|
|
25378
|
+
// node_modules/circle-ir/dist/analysis/passes/language-sources-pass.js
|
|
25341
25379
|
var JS_DOM_XSS_SINKS = [
|
|
25342
25380
|
{ pattern: /\.innerHTML\s*=/, type: "xss", cwe: "CWE-79", severity: "critical" },
|
|
25343
25381
|
{ pattern: /\.outerHTML\s*=/, type: "xss", cwe: "CWE-79", severity: "critical" },
|
|
@@ -26939,6 +26977,13 @@ function buildJavaTaintedVars(sourceCode, seedVars) {
|
|
|
26939
26977
|
"interface",
|
|
26940
26978
|
"enum"
|
|
26941
26979
|
]);
|
|
26980
|
+
const complexTaintedRes = [];
|
|
26981
|
+
for (const v of knownTainted) {
|
|
26982
|
+
if (!/^[\p{L}\p{N}_]+$/u.test(v)) {
|
|
26983
|
+
const esc = v.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
26984
|
+
complexTaintedRes.push(new RegExp(`(?<![\\p{L}\\p{N}_])${esc}(?![\\p{L}\\p{N}_])`, "u"));
|
|
26985
|
+
}
|
|
26986
|
+
}
|
|
26942
26987
|
let changed = true;
|
|
26943
26988
|
let guard = 0;
|
|
26944
26989
|
while (changed && guard < lines.length + 2) {
|
|
@@ -26960,9 +27005,9 @@ function buildJavaTaintedVars(sourceCode, seedVars) {
|
|
|
26960
27005
|
continue;
|
|
26961
27006
|
if (knownTainted.has(lhs))
|
|
26962
27007
|
continue;
|
|
26963
|
-
const escaped = (v) => v.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
26964
27008
|
const rhsCode = rhs.replace(/\$@?"(?:[^"\\]|\\.)*"/g, (lit) => " " + [...lit.matchAll(/\{([^}]*)\}/g)].map((x) => x[1]).join(" ") + " ").replace(/@?"(?:[^"\\]|\\.)*"/g, " ").replace(/'(?:[^'\\]|\\.)'/g, " ");
|
|
26965
|
-
const
|
|
27009
|
+
const rhsIdents = rhsCode.match(/[\p{L}\p{N}_]+/gu);
|
|
27010
|
+
const ref = rhsIdents !== null && rhsIdents.some((t) => knownTainted.has(t)) || complexTaintedRes.length > 0 && complexTaintedRes.some((re) => re.test(rhsCode));
|
|
26966
27011
|
if (ref) {
|
|
26967
27012
|
derived.set(lhs, i2 + 1);
|
|
26968
27013
|
knownTainted.add(lhs);
|
|
@@ -32378,7 +32423,7 @@ function findJsTemplateInjectionSstiFindings(code, file) {
|
|
|
32378
32423
|
return findings;
|
|
32379
32424
|
}
|
|
32380
32425
|
|
|
32381
|
-
//
|
|
32426
|
+
// node_modules/circle-ir/dist/analysis/passes/source-semantics-pass.js
|
|
32382
32427
|
var DEMO_PATH_RE = /(?:^|\/)(?:demo|example|examples|samples|integration-tests|integration_tests)(?:\/|$)/i;
|
|
32383
32428
|
var CONST_STRING_ASSIGN_RE = /^\s*(?:final\s+|static\s+final\s+)?[A-Za-z_][\w.<>\[\]]*\s+[A-Za-z_]\w*\s*=\s*"[^"]*"\s*;?\s*$/;
|
|
32384
32429
|
var STATIC_FINAL_RE = /^\s*(?:public\s+|private\s+|protected\s+)?static\s+final\s+/;
|
|
@@ -32466,7 +32511,7 @@ class SourceSemanticsPass {
|
|
|
32466
32511
|
}
|
|
32467
32512
|
}
|
|
32468
32513
|
|
|
32469
|
-
//
|
|
32514
|
+
// node_modules/circle-ir/dist/analysis/passes/library-profile-source-gate-pass.js
|
|
32470
32515
|
var SPECULATIVE_SOURCE_TYPES = new Set([
|
|
32471
32516
|
"interprocedural_param",
|
|
32472
32517
|
"constructor_field"
|
|
@@ -32521,7 +32566,7 @@ class LibraryProfileSourceGatePass {
|
|
|
32521
32566
|
}
|
|
32522
32567
|
}
|
|
32523
32568
|
|
|
32524
|
-
//
|
|
32569
|
+
// node_modules/circle-ir/dist/analysis/passes/mybatis-annotation-sql-sink-pass.js
|
|
32525
32570
|
var MYBATIS_SQL_ANNOTATIONS = new Set([
|
|
32526
32571
|
"Select",
|
|
32527
32572
|
"Update",
|
|
@@ -32748,7 +32793,7 @@ class MyBatisAnnotationSqlSinkPass {
|
|
|
32748
32793
|
}
|
|
32749
32794
|
}
|
|
32750
32795
|
|
|
32751
|
-
//
|
|
32796
|
+
// node_modules/circle-ir/dist/analysis/passes/sink-filter-pass.js
|
|
32752
32797
|
function escapeReSf(s) {
|
|
32753
32798
|
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
32754
32799
|
}
|
|
@@ -34552,7 +34597,7 @@ function isXPathQuoteEscapedOnLine(lineText, varName) {
|
|
|
34552
34597
|
return seen > 0;
|
|
34553
34598
|
}
|
|
34554
34599
|
|
|
34555
|
-
//
|
|
34600
|
+
// node_modules/circle-ir/dist/analysis/passes/sink-semantics-pass.js
|
|
34556
34601
|
function buildRegistry(entries) {
|
|
34557
34602
|
const registry = new Map;
|
|
34558
34603
|
for (const entry of entries) {
|
|
@@ -34600,7 +34645,7 @@ class SinkSemanticsPass {
|
|
|
34600
34645
|
}
|
|
34601
34646
|
}
|
|
34602
34647
|
|
|
34603
|
-
//
|
|
34648
|
+
// node_modules/circle-ir/dist/analysis/dependency-versions.js
|
|
34604
34649
|
function resolveFastjsonFromPom(pomXml) {
|
|
34605
34650
|
if (!pomXml)
|
|
34606
34651
|
return null;
|
|
@@ -34778,7 +34823,7 @@ function fileConfiguresSnakeYamlSafely(source) {
|
|
|
34778
34823
|
return false;
|
|
34779
34824
|
}
|
|
34780
34825
|
|
|
34781
|
-
//
|
|
34826
|
+
// node_modules/circle-ir/dist/analysis/passes/deserialization-safety-gate-pass.js
|
|
34782
34827
|
var FASTJSON_METHODS = new Set(["parseObject", "parse"]);
|
|
34783
34828
|
var FASTJSON_CLASSES = new Set(["JSON", "JSONObject"]);
|
|
34784
34829
|
var JACKSON_METHODS = new Set(["readValue", "convertValue", "treeToValue"]);
|
|
@@ -34855,7 +34900,7 @@ class DeserializationSafetyGatePass {
|
|
|
34855
34900
|
}
|
|
34856
34901
|
}
|
|
34857
34902
|
|
|
34858
|
-
//
|
|
34903
|
+
// node_modules/circle-ir/dist/analysis/passes/prompt-injection-safety-gate-pass.js
|
|
34859
34904
|
function isDelimiterLiteral(lit) {
|
|
34860
34905
|
const s = lit.trim();
|
|
34861
34906
|
if (s.length === 0)
|
|
@@ -35098,7 +35143,7 @@ class PromptInjectionSafetyGatePass {
|
|
|
35098
35143
|
}
|
|
35099
35144
|
}
|
|
35100
35145
|
|
|
35101
|
-
//
|
|
35146
|
+
// node_modules/circle-ir/dist/analysis/passes/speculative-prompt-param-source-pass.js
|
|
35102
35147
|
function returnOrAssignRhs(text) {
|
|
35103
35148
|
const t = text.trim();
|
|
35104
35149
|
const ret = t.match(/^return\s+(.+?);?$/);
|
|
@@ -35224,7 +35269,7 @@ class SpeculativePromptParamSourcePass {
|
|
|
35224
35269
|
}
|
|
35225
35270
|
}
|
|
35226
35271
|
|
|
35227
|
-
//
|
|
35272
|
+
// node_modules/circle-ir/dist/analysis/passes/cli-main-reflection-suppress-pass.js
|
|
35228
35273
|
var REFLECTION_SINK_METHODS = new Set([
|
|
35229
35274
|
"forName",
|
|
35230
35275
|
"newInstance",
|
|
@@ -35412,7 +35457,7 @@ class CliMainReflectionSuppressPass {
|
|
|
35412
35457
|
}
|
|
35413
35458
|
}
|
|
35414
35459
|
|
|
35415
|
-
//
|
|
35460
|
+
// node_modules/circle-ir/dist/analysis/passes/library-profile-sink-gate-pass.js
|
|
35416
35461
|
var DROPPED_SINK_TYPES = new Set([
|
|
35417
35462
|
"log_injection"
|
|
35418
35463
|
]);
|
|
@@ -35518,7 +35563,7 @@ class LibraryProfileCwe22PathGatePass {
|
|
|
35518
35563
|
}
|
|
35519
35564
|
}
|
|
35520
35565
|
|
|
35521
|
-
//
|
|
35566
|
+
// node_modules/circle-ir/dist/analysis/passes/library-profile-xss-gate-pass.js
|
|
35522
35567
|
var XSS_NON_HTML_OUTPUT_CLASSES = new Set([
|
|
35523
35568
|
"StringBuilder",
|
|
35524
35569
|
"StringBuffer",
|
|
@@ -35599,7 +35644,7 @@ class LibraryProfileXssGatePass {
|
|
|
35599
35644
|
}
|
|
35600
35645
|
}
|
|
35601
35646
|
|
|
35602
|
-
//
|
|
35647
|
+
// node_modules/circle-ir/dist/analysis/passes/taint-propagation-pass.js
|
|
35603
35648
|
class TaintPropagationPass {
|
|
35604
35649
|
name = "taint-propagation";
|
|
35605
35650
|
category = "security";
|
|
@@ -36283,13 +36328,22 @@ function detectParameterSinkFlows(types, calls, sources, sinks, unreachableLines
|
|
|
36283
36328
|
}
|
|
36284
36329
|
return flows;
|
|
36285
36330
|
}
|
|
36331
|
+
var _reassignSplitCode;
|
|
36332
|
+
var _reassignSplitLines;
|
|
36333
|
+
function splitLinesCached(code) {
|
|
36334
|
+
if (code === _reassignSplitCode && _reassignSplitLines)
|
|
36335
|
+
return _reassignSplitLines;
|
|
36336
|
+
_reassignSplitCode = code;
|
|
36337
|
+
_reassignSplitLines = code.split(`
|
|
36338
|
+
`);
|
|
36339
|
+
return _reassignSplitLines;
|
|
36340
|
+
}
|
|
36286
36341
|
function isReassignedToLiteralBetween(code, variable, srcLine, sinkLine) {
|
|
36287
36342
|
if (!variable || sinkLine - srcLine < 2)
|
|
36288
36343
|
return false;
|
|
36289
36344
|
if (!/^[A-Za-z_][\w]*$/.test(variable))
|
|
36290
36345
|
return false;
|
|
36291
|
-
const lines = code
|
|
36292
|
-
`);
|
|
36346
|
+
const lines = splitLinesCached(code);
|
|
36293
36347
|
const lo = Math.max(0, srcLine);
|
|
36294
36348
|
const hi = Math.min(lines.length, sinkLine - 1);
|
|
36295
36349
|
const strLit = `(?:"[^"\\\\]*(?:\\\\.[^"\\\\]*)*"|'[^'\\\\]*(?:\\\\.[^'\\\\]*)*'|\`[^\`\\\\]*(?:\\\\.[^\`\\\\]*)*\`)`;
|
|
@@ -36627,9 +36681,10 @@ function detectExpressionScanFlows(calls, sources, sinks, sanitizers, unreachabl
|
|
|
36627
36681
|
}
|
|
36628
36682
|
}
|
|
36629
36683
|
}
|
|
36684
|
+
const SIMPLE_IDENT = /^[\p{L}\p{N}_]+$/u;
|
|
36630
36685
|
const reCache = new Map;
|
|
36631
36686
|
for (const s of sourcesWithVar) {
|
|
36632
|
-
if (reCache.has(s.variable))
|
|
36687
|
+
if (SIMPLE_IDENT.test(s.variable) || reCache.has(s.variable))
|
|
36633
36688
|
continue;
|
|
36634
36689
|
const escaped = s.variable.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
36635
36690
|
reCache.set(s.variable, new RegExp(`(?<![\\p{L}\\p{N}_])${escaped}(?![\\p{L}\\p{N}_])`, "u"));
|
|
@@ -36640,6 +36695,23 @@ function detectExpressionScanFlows(calls, sources, sinks, sanitizers, unreachabl
|
|
|
36640
36695
|
existing.push(call);
|
|
36641
36696
|
callsByLine.set(call.location.line, existing);
|
|
36642
36697
|
}
|
|
36698
|
+
const sourcesByVar = new Map;
|
|
36699
|
+
const complexSources = [];
|
|
36700
|
+
sourcesWithVar.forEach((source, ord) => {
|
|
36701
|
+
const complex = !SIMPLE_IDENT.test(source.variable);
|
|
36702
|
+
const entry = { source, ord, complex };
|
|
36703
|
+
if (!complex) {
|
|
36704
|
+
let list = sourcesByVar.get(source.variable);
|
|
36705
|
+
if (!list) {
|
|
36706
|
+
list = [];
|
|
36707
|
+
sourcesByVar.set(source.variable, list);
|
|
36708
|
+
}
|
|
36709
|
+
list.push(entry);
|
|
36710
|
+
} else {
|
|
36711
|
+
complexSources.push(entry);
|
|
36712
|
+
}
|
|
36713
|
+
});
|
|
36714
|
+
const flowKeys = new Set;
|
|
36643
36715
|
for (const sink of sinks) {
|
|
36644
36716
|
if (unreachableLines.has(sink.line))
|
|
36645
36717
|
continue;
|
|
@@ -36652,18 +36724,35 @@ function detectExpressionScanFlows(calls, sources, sinks, sanitizers, unreachabl
|
|
|
36652
36724
|
const expr = arg.expression;
|
|
36653
36725
|
if (!expr)
|
|
36654
36726
|
continue;
|
|
36655
|
-
|
|
36727
|
+
const exprIdentMatches = expr.match(/[\p{L}\p{N}_]+/gu);
|
|
36728
|
+
let candidates = complexSources.length > 0 ? complexSources.slice() : null;
|
|
36729
|
+
if (exprIdentMatches) {
|
|
36730
|
+
for (const id of new Set(exprIdentMatches)) {
|
|
36731
|
+
const list = sourcesByVar.get(id);
|
|
36732
|
+
if (!list)
|
|
36733
|
+
continue;
|
|
36734
|
+
(candidates ??= []).push(...list);
|
|
36735
|
+
}
|
|
36736
|
+
}
|
|
36737
|
+
if (!candidates)
|
|
36738
|
+
continue;
|
|
36739
|
+
if (candidates.length > 1)
|
|
36740
|
+
candidates.sort((a, b) => a.ord - b.ord);
|
|
36741
|
+
for (const { source, complex } of candidates) {
|
|
36656
36742
|
if (source.line >= sink.line)
|
|
36657
36743
|
continue;
|
|
36658
36744
|
if (source.in_method && call.in_method && source.in_method !== call.in_method) {
|
|
36659
36745
|
continue;
|
|
36660
36746
|
}
|
|
36661
|
-
|
|
36662
|
-
|
|
36663
|
-
|
|
36747
|
+
if (complex) {
|
|
36748
|
+
const re = reCache.get(source.variable);
|
|
36749
|
+
if (!re || !re.test(expr))
|
|
36750
|
+
continue;
|
|
36751
|
+
}
|
|
36664
36752
|
if (!sourceSemanticsAllowed(source, sink.type))
|
|
36665
36753
|
continue;
|
|
36666
|
-
|
|
36754
|
+
const dedupKey = `${source.line}:${sink.line}:${sink.type}`;
|
|
36755
|
+
if (flowKeys.has(dedupKey))
|
|
36667
36756
|
continue;
|
|
36668
36757
|
if (aliasSanitizedFor.get(source.variable)?.has(sink.type)) {
|
|
36669
36758
|
break;
|
|
@@ -36683,6 +36772,7 @@ function detectExpressionScanFlows(calls, sources, sinks, sanitizers, unreachabl
|
|
|
36683
36772
|
confidence: source.confidence * sink.confidence * 0.7,
|
|
36684
36773
|
sanitized: false
|
|
36685
36774
|
});
|
|
36775
|
+
flowKeys.add(dedupKey);
|
|
36686
36776
|
break;
|
|
36687
36777
|
}
|
|
36688
36778
|
}
|
|
@@ -36784,7 +36874,7 @@ function pickScopedSource(sources, sinkLine, methodName, types, taintedVar) {
|
|
|
36784
36874
|
return sources[0];
|
|
36785
36875
|
}
|
|
36786
36876
|
|
|
36787
|
-
//
|
|
36877
|
+
// node_modules/circle-ir/dist/analysis/interprocedural.js
|
|
36788
36878
|
function analyzeInterprocedural2(graphOrTypes, callsOrSources, dfgOrSinks, sourcesOrSanitizers, sinksOrOptions, sanitizersArg, optionsArg = {}) {
|
|
36789
36879
|
let graph;
|
|
36790
36880
|
let sources;
|
|
@@ -37298,7 +37388,7 @@ function findTaintBridges2(result) {
|
|
|
37298
37388
|
return bridges;
|
|
37299
37389
|
}
|
|
37300
37390
|
|
|
37301
|
-
//
|
|
37391
|
+
// node_modules/circle-ir/dist/analysis/passes/interprocedural-pass.js
|
|
37302
37392
|
class InterproceduralPass {
|
|
37303
37393
|
name = "interprocedural";
|
|
37304
37394
|
category = "security";
|
|
@@ -37504,7 +37594,7 @@ class InterproceduralPass {
|
|
|
37504
37594
|
}
|
|
37505
37595
|
}
|
|
37506
37596
|
|
|
37507
|
-
//
|
|
37597
|
+
// node_modules/circle-ir/dist/analysis/passes/dead-code-pass.js
|
|
37508
37598
|
class DeadCodePass {
|
|
37509
37599
|
name = "dead-code";
|
|
37510
37600
|
category = "reliability";
|
|
@@ -37580,7 +37670,7 @@ class DeadCodePass {
|
|
|
37580
37670
|
}
|
|
37581
37671
|
}
|
|
37582
37672
|
|
|
37583
|
-
//
|
|
37673
|
+
// node_modules/circle-ir/dist/analysis/passes/missing-await-pass.js
|
|
37584
37674
|
var ASYNC_METHODS = new Set([
|
|
37585
37675
|
"readFile",
|
|
37586
37676
|
"writeFile",
|
|
@@ -37659,7 +37749,7 @@ class MissingAwaitPass {
|
|
|
37659
37749
|
}
|
|
37660
37750
|
}
|
|
37661
37751
|
|
|
37662
|
-
//
|
|
37752
|
+
// node_modules/circle-ir/dist/analysis/passes/n-plus-one-pass.js
|
|
37663
37753
|
var HIGH_CONFIDENCE_DB_METHODS = new Set([
|
|
37664
37754
|
"executeQuery",
|
|
37665
37755
|
"executeUpdate",
|
|
@@ -37782,7 +37872,7 @@ class NPlusOnePass {
|
|
|
37782
37872
|
}
|
|
37783
37873
|
}
|
|
37784
37874
|
|
|
37785
|
-
//
|
|
37875
|
+
// node_modules/circle-ir/dist/analysis/passes/missing-public-doc-pass.js
|
|
37786
37876
|
var TEST_PATH_RE = /[/._](test|tests|spec|specs|__tests?__|__mocks?__)[/._]/i;
|
|
37787
37877
|
var UTIL_DIR_RE = /[/](utils?|helpers?|internal|private|common|shared)[/]/i;
|
|
37788
37878
|
function hasDocCommentBefore(lines, startLine) {
|
|
@@ -37889,7 +37979,7 @@ class MissingPublicDocPass {
|
|
|
37889
37979
|
}
|
|
37890
37980
|
}
|
|
37891
37981
|
|
|
37892
|
-
//
|
|
37982
|
+
// node_modules/circle-ir/dist/analysis/passes/todo-in-prod-pass.js
|
|
37893
37983
|
var TEST_PATH_RE2 = /[/._](test|tests|spec|specs|__tests?__|__mocks?__)[/._]/i;
|
|
37894
37984
|
var MARKER_RE = /(?:\/\/|#|--|^\s*\*)\s*(TODO|FIXME|HACK|XXX)\b/i;
|
|
37895
37985
|
function markerSeverity(marker) {
|
|
@@ -37935,7 +38025,7 @@ class TodoInProdPass {
|
|
|
37935
38025
|
}
|
|
37936
38026
|
}
|
|
37937
38027
|
|
|
37938
|
-
//
|
|
38028
|
+
// node_modules/circle-ir/dist/analysis/passes/string-concat-loop-pass.js
|
|
37939
38029
|
var CONCAT_RE = /\b([a-zA-Z_$][a-zA-Z0-9_$]*)\s*\+=/;
|
|
37940
38030
|
var NUMERIC_VAR_RE = /^(i|j|k|n|m|x|y|z|count|sum|total|size|index|len|length|num|idx|score|counter|offset|pos|col|row|result|ret|value|acc|bits|byte|bytes|flag|flags|step|delta|diff|dist|min|max|avg|mean|page|line|err|error)$/i;
|
|
37941
38031
|
var NUMERIC_SUFFIX_RE = /(Count|Sum|Total|Size|Index|Length|Offset|Position|Score|Counter|Num|Amount|Val|Idx|Len|Max|Min|Avg|Delta|Diff|Step|Flag|Flags|Bits|Byte|Bytes|Calls|Items|Nodes|Edges|Blocks|Lines|Chars|Entries|Records|Rows)$/;
|
|
@@ -37998,7 +38088,7 @@ class StringConcatLoopPass {
|
|
|
37998
38088
|
}
|
|
37999
38089
|
}
|
|
38000
38090
|
|
|
38001
|
-
//
|
|
38091
|
+
// node_modules/circle-ir/dist/analysis/passes/sync-io-async-pass.js
|
|
38002
38092
|
var BLOCKING_METHODS = new Set([
|
|
38003
38093
|
"sleep"
|
|
38004
38094
|
]);
|
|
@@ -38059,7 +38149,7 @@ class SyncIoAsyncPass {
|
|
|
38059
38149
|
}
|
|
38060
38150
|
}
|
|
38061
38151
|
|
|
38062
|
-
//
|
|
38152
|
+
// node_modules/circle-ir/dist/analysis/passes/unchecked-return-pass.js
|
|
38063
38153
|
var MUST_CHECK_HIGH = new Set([
|
|
38064
38154
|
"createNewFile",
|
|
38065
38155
|
"mkdir",
|
|
@@ -38132,7 +38222,7 @@ class UncheckedReturnPass {
|
|
|
38132
38222
|
}
|
|
38133
38223
|
}
|
|
38134
38224
|
|
|
38135
|
-
//
|
|
38225
|
+
// node_modules/circle-ir/dist/analysis/passes/null-deref-pass.js
|
|
38136
38226
|
var NULL_EXPR_RE = /^\s*(null|None|undefined)\s*$/;
|
|
38137
38227
|
function escRe(s) {
|
|
38138
38228
|
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
@@ -38214,7 +38304,7 @@ class NullDerefPass {
|
|
|
38214
38304
|
}
|
|
38215
38305
|
}
|
|
38216
38306
|
|
|
38217
|
-
//
|
|
38307
|
+
// node_modules/circle-ir/dist/analysis/passes/resource-leak-pass.js
|
|
38218
38308
|
function escapeRegex2(s) {
|
|
38219
38309
|
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
38220
38310
|
}
|
|
@@ -38491,7 +38581,7 @@ class ResourceLeakPass {
|
|
|
38491
38581
|
}
|
|
38492
38582
|
}
|
|
38493
38583
|
|
|
38494
|
-
//
|
|
38584
|
+
// node_modules/circle-ir/dist/graph/scope-graph.js
|
|
38495
38585
|
function hasDeclKeyword(lineText, language) {
|
|
38496
38586
|
switch (language) {
|
|
38497
38587
|
case "java":
|
|
@@ -38531,7 +38621,7 @@ class ScopeGraph {
|
|
|
38531
38621
|
}
|
|
38532
38622
|
}
|
|
38533
38623
|
|
|
38534
|
-
//
|
|
38624
|
+
// node_modules/circle-ir/dist/analysis/passes/variable-shadowing-pass.js
|
|
38535
38625
|
var SKIP_NAMES = new Set([
|
|
38536
38626
|
"let",
|
|
38537
38627
|
"const",
|
|
@@ -38689,7 +38779,7 @@ class VariableShadowingPass {
|
|
|
38689
38779
|
}
|
|
38690
38780
|
}
|
|
38691
38781
|
|
|
38692
|
-
//
|
|
38782
|
+
// node_modules/circle-ir/dist/analysis/passes/leaked-global-pass.js
|
|
38693
38783
|
var SKIP_NAMES2 = new Set([
|
|
38694
38784
|
"_",
|
|
38695
38785
|
"e",
|
|
@@ -38776,7 +38866,7 @@ class LeakedGlobalPass {
|
|
|
38776
38866
|
}
|
|
38777
38867
|
}
|
|
38778
38868
|
|
|
38779
|
-
//
|
|
38869
|
+
// node_modules/circle-ir/dist/analysis/passes/unused-variable-pass.js
|
|
38780
38870
|
var SKIP_NAMES3 = new Set([
|
|
38781
38871
|
"_",
|
|
38782
38872
|
"unused",
|
|
@@ -38921,7 +39011,7 @@ class UnusedVariablePass {
|
|
|
38921
39011
|
}
|
|
38922
39012
|
}
|
|
38923
39013
|
|
|
38924
|
-
//
|
|
39014
|
+
// node_modules/circle-ir/dist/analysis/passes/dependency-fan-out-pass.js
|
|
38925
39015
|
var DEFAULT_THRESHOLD = 20;
|
|
38926
39016
|
|
|
38927
39017
|
class DependencyFanOutPass {
|
|
@@ -38953,7 +39043,7 @@ class DependencyFanOutPass {
|
|
|
38953
39043
|
}
|
|
38954
39044
|
}
|
|
38955
39045
|
|
|
38956
|
-
//
|
|
39046
|
+
// node_modules/circle-ir/dist/analysis/passes/stale-doc-ref-pass.js
|
|
38957
39047
|
var DOC_BLOCK_RE = /\/\*\*([\s\S]*?)\*\//g;
|
|
38958
39048
|
var LINK_RE = /\{@link\s+([\w.#]+)/g;
|
|
38959
39049
|
var SEE_RE = /@see\s+([\w.#]+)/g;
|
|
@@ -39032,7 +39122,7 @@ class StaleDocRefPass {
|
|
|
39032
39122
|
}
|
|
39033
39123
|
}
|
|
39034
39124
|
|
|
39035
|
-
//
|
|
39125
|
+
// node_modules/circle-ir/dist/analysis/passes/infinite-loop-pass.js
|
|
39036
39126
|
var EXIT_KEYWORDS = /\b(return|throw|raise|break|System\.exit|process\.exit|os\._exit|exit!\()\b/;
|
|
39037
39127
|
var ITERATOR_LOOP_PATTERNS = [
|
|
39038
39128
|
/\bfor\s*\([^)]*\s+of\s+/,
|
|
@@ -39151,7 +39241,7 @@ class InfiniteLoopPass {
|
|
|
39151
39241
|
}
|
|
39152
39242
|
}
|
|
39153
39243
|
|
|
39154
|
-
//
|
|
39244
|
+
// node_modules/circle-ir/dist/analysis/passes/deep-inheritance-pass.js
|
|
39155
39245
|
var DEPTH_THRESHOLD = 5;
|
|
39156
39246
|
var CYCLE_GUARD = 20;
|
|
39157
39247
|
|
|
@@ -39214,7 +39304,7 @@ class DeepInheritancePass {
|
|
|
39214
39304
|
}
|
|
39215
39305
|
}
|
|
39216
39306
|
|
|
39217
|
-
//
|
|
39307
|
+
// node_modules/circle-ir/dist/analysis/passes/redundant-loop-pass.js
|
|
39218
39308
|
var LENGTH_PATTERN = /\b([A-Za-z_$][A-Za-z0-9_$]*)\s*\.\s*(?:length|size\(\)|count\(\))/g;
|
|
39219
39309
|
var LENGTH_PATTERN_METHODS = /\b([A-Za-z_$][A-Za-z0-9_$]*)\s*\.\s*(?:size\(\)|count\(\))/g;
|
|
39220
39310
|
var OBJECT_STATIC_PATTERN = /\bObject\s*\.\s*(?:keys|values|entries)\s*\(\s*([A-Za-z_$][A-Za-z0-9_$]*)\s*\)/g;
|
|
@@ -39337,7 +39427,7 @@ class RedundantLoopPass {
|
|
|
39337
39427
|
}
|
|
39338
39428
|
}
|
|
39339
39429
|
|
|
39340
|
-
//
|
|
39430
|
+
// node_modules/circle-ir/dist/analysis/passes/unbounded-collection-pass.js
|
|
39341
39431
|
var GROW_METHODS = {
|
|
39342
39432
|
java: new Set(["add", "put", "offer", "push", "addAll", "addFirst", "addLast", "enqueue", "insert"]),
|
|
39343
39433
|
javascript: new Set(["push", "set", "add", "unshift", "append", "prepend"]),
|
|
@@ -39461,7 +39551,7 @@ class UnboundedCollectionPass {
|
|
|
39461
39551
|
}
|
|
39462
39552
|
}
|
|
39463
39553
|
|
|
39464
|
-
//
|
|
39554
|
+
// node_modules/circle-ir/dist/analysis/passes/serial-await-pass.js
|
|
39465
39555
|
var AWAIT_ASSIGN_RE = /(?:const|let|var)?\s*(\w+)\s*=\s*await\s/;
|
|
39466
39556
|
var AWAIT_RE = /\bawait\s/;
|
|
39467
39557
|
|
|
@@ -39557,7 +39647,7 @@ class SerialAwaitPass {
|
|
|
39557
39647
|
}
|
|
39558
39648
|
}
|
|
39559
39649
|
|
|
39560
|
-
//
|
|
39650
|
+
// node_modules/circle-ir/dist/analysis/passes/react-inline-jsx-pass.js
|
|
39561
39651
|
var JSX_COMPONENT_RE = /<[A-Z][A-Za-z0-9]*/;
|
|
39562
39652
|
var INLINE_OBJECT_RE = /\s([A-Za-z][A-Za-z0-9_]*)=\{\{/g;
|
|
39563
39653
|
var INLINE_ARROW_RE = /\s([A-Za-z][A-Za-z0-9_]*)=\{(?:\(|[A-Za-z_$]).*?=>/g;
|
|
@@ -39661,7 +39751,7 @@ class ReactInlineJsxPass {
|
|
|
39661
39751
|
}
|
|
39662
39752
|
}
|
|
39663
39753
|
|
|
39664
|
-
//
|
|
39754
|
+
// node_modules/circle-ir/dist/graph/exception-flow-graph.js
|
|
39665
39755
|
class ExceptionFlowGraph2 {
|
|
39666
39756
|
pairs;
|
|
39667
39757
|
catchEntryIds;
|
|
@@ -39712,7 +39802,7 @@ class ExceptionFlowGraph2 {
|
|
|
39712
39802
|
}
|
|
39713
39803
|
}
|
|
39714
39804
|
|
|
39715
|
-
//
|
|
39805
|
+
// node_modules/circle-ir/dist/analysis/passes/swallowed-exception-pass.js
|
|
39716
39806
|
var MEANINGFUL_ACTION_RE = /\b(throw|raise|log|logger|console\.(error|warn|log|debug|info)|System\.(out|err)\.|print(?:ln|f)?|warn|error|debug|info|fatal|LOGGER|LOG|logging\.(warning|error|debug|info|critical))\b|\breturn\s+\S/;
|
|
39717
39807
|
|
|
39718
39808
|
class SwallowedExceptionPass {
|
|
@@ -39810,7 +39900,7 @@ class SwallowedExceptionPass {
|
|
|
39810
39900
|
}
|
|
39811
39901
|
}
|
|
39812
39902
|
|
|
39813
|
-
//
|
|
39903
|
+
// node_modules/circle-ir/dist/analysis/passes/broad-catch-pass.js
|
|
39814
39904
|
var JAVA_BROAD_RE = /catch\s*\(\s*(Exception|Throwable|RuntimeException|Error)\s/;
|
|
39815
39905
|
var PYTHON_BROAD_RE = /^\s*except\s*:|except\s+(Exception|BaseException)\b/;
|
|
39816
39906
|
|
|
@@ -39866,7 +39956,7 @@ class BroadCatchPass {
|
|
|
39866
39956
|
}
|
|
39867
39957
|
}
|
|
39868
39958
|
|
|
39869
|
-
//
|
|
39959
|
+
// node_modules/circle-ir/dist/analysis/passes/unhandled-exception-pass.js
|
|
39870
39960
|
var JS_THROW_RE = /^\s*throw\s+/;
|
|
39871
39961
|
var PYTHON_RAISE_RE = /^\s*raise\b/;
|
|
39872
39962
|
function isValidationThrow(lines, throwLine) {
|
|
@@ -40036,7 +40126,7 @@ class UnhandledExceptionPass {
|
|
|
40036
40126
|
}
|
|
40037
40127
|
}
|
|
40038
40128
|
|
|
40039
|
-
//
|
|
40129
|
+
// node_modules/circle-ir/dist/analysis/passes/double-close-pass.js
|
|
40040
40130
|
var RESOURCE_CTORS2 = new Set([
|
|
40041
40131
|
"FileInputStream",
|
|
40042
40132
|
"FileOutputStream",
|
|
@@ -40151,7 +40241,7 @@ class DoubleClosePass {
|
|
|
40151
40241
|
}
|
|
40152
40242
|
}
|
|
40153
40243
|
|
|
40154
|
-
//
|
|
40244
|
+
// node_modules/circle-ir/dist/analysis/passes/use-after-close-pass.js
|
|
40155
40245
|
var RESOURCE_CTORS3 = new Set([
|
|
40156
40246
|
"FileInputStream",
|
|
40157
40247
|
"FileOutputStream",
|
|
@@ -40259,7 +40349,7 @@ class UseAfterClosePass {
|
|
|
40259
40349
|
}
|
|
40260
40350
|
}
|
|
40261
40351
|
|
|
40262
|
-
//
|
|
40352
|
+
// node_modules/circle-ir/dist/graph/dominator-graph.js
|
|
40263
40353
|
function computeRPO(cfg, entryId) {
|
|
40264
40354
|
const outgoing = new Map;
|
|
40265
40355
|
for (const edge of cfg.edges) {
|
|
@@ -40424,7 +40514,7 @@ class DominatorGraph2 {
|
|
|
40424
40514
|
}
|
|
40425
40515
|
}
|
|
40426
40516
|
|
|
40427
|
-
//
|
|
40517
|
+
// node_modules/circle-ir/dist/analysis/passes/cleanup-verify-pass.js
|
|
40428
40518
|
var RESOURCE_CTORS4 = new Set([
|
|
40429
40519
|
"FileInputStream",
|
|
40430
40520
|
"FileOutputStream",
|
|
@@ -40549,7 +40639,7 @@ class CleanupVerifyPass {
|
|
|
40549
40639
|
}
|
|
40550
40640
|
}
|
|
40551
40641
|
|
|
40552
|
-
//
|
|
40642
|
+
// node_modules/circle-ir/dist/analysis/passes/missing-override-pass.js
|
|
40553
40643
|
class MissingOverridePass {
|
|
40554
40644
|
name = "missing-override";
|
|
40555
40645
|
category = "maintainability";
|
|
@@ -40636,7 +40726,7 @@ class MissingOverridePass {
|
|
|
40636
40726
|
}
|
|
40637
40727
|
}
|
|
40638
40728
|
|
|
40639
|
-
//
|
|
40729
|
+
// node_modules/circle-ir/dist/analysis/passes/unused-interface-method-pass.js
|
|
40640
40730
|
class UnusedInterfaceMethodPass {
|
|
40641
40731
|
name = "unused-interface-method";
|
|
40642
40732
|
category = "maintainability";
|
|
@@ -40679,7 +40769,7 @@ class UnusedInterfaceMethodPass {
|
|
|
40679
40769
|
}
|
|
40680
40770
|
}
|
|
40681
40771
|
|
|
40682
|
-
//
|
|
40772
|
+
// node_modules/circle-ir/dist/analysis/passes/blocking-main-thread-pass.js
|
|
40683
40773
|
var HTTP_DECORATORS = new Set([
|
|
40684
40774
|
"Get",
|
|
40685
40775
|
"Post",
|
|
@@ -40782,7 +40872,7 @@ class BlockingMainThreadPass {
|
|
|
40782
40872
|
}
|
|
40783
40873
|
}
|
|
40784
40874
|
|
|
40785
|
-
//
|
|
40875
|
+
// node_modules/circle-ir/dist/analysis/passes/excessive-allocation-pass.js
|
|
40786
40876
|
var ALLOC_PATTERNS = {
|
|
40787
40877
|
javascript: /\bnew\s+(Array|Map|Set|Object|WeakMap|WeakSet|Error|RegExp|Date|Buffer|Uint8Array|Int8Array|Float32Array|ArrayBuffer)\s*[(<]|\bArray\.from\s*\(|\bstructuredClone\s*\(|\bObject\.create\s*\(/,
|
|
40788
40878
|
typescript: /\bnew\s+(Array|Map|Set|Object|WeakMap|WeakSet|Error|RegExp|Date|Buffer|Uint8Array|Int8Array|Float32Array|ArrayBuffer)\s*[(<]|\bArray\.from\s*\(|\bstructuredClone\s*\(|\bObject\.create\s*\(/,
|
|
@@ -40849,7 +40939,7 @@ class ExcessiveAllocationPass {
|
|
|
40849
40939
|
}
|
|
40850
40940
|
}
|
|
40851
40941
|
|
|
40852
|
-
//
|
|
40942
|
+
// node_modules/circle-ir/dist/analysis/passes/missing-stream-pass.js
|
|
40853
40943
|
var JS_WHOLE_LOAD_RE = /\b(?:readFileSync|fs\.readFile\b|response\.text\b|response\.json\b|res\.text\b|res\.json\b|body\.text\b|body\.json\b)\s*\(/;
|
|
40854
40944
|
var JS_STREAM_RE = /\.pipe\s*\(|\.on\s*\(\s*['"]data['"]|for\s+await\s*\(|\bcreateReadStream\b|\bstream\b/i;
|
|
40855
40945
|
var JAVA_WHOLE_READ_RE = /\bFiles\.readAllBytes\s*\(|\bFiles\.readAllLines\s*\(|\bFiles\.readString\s*\(|\bnew\s+BufferedReader\s*\(|\bFileInputStream\b/;
|
|
@@ -40996,7 +41086,7 @@ class MissingStreamPass {
|
|
|
40996
41086
|
}
|
|
40997
41087
|
}
|
|
40998
41088
|
|
|
40999
|
-
//
|
|
41089
|
+
// node_modules/circle-ir/dist/analysis/passes/god-class-pass.js
|
|
41000
41090
|
var WMC_THRESHOLD = 47;
|
|
41001
41091
|
var LCOM2_THRESHOLD = 0.8;
|
|
41002
41092
|
var CBO_THRESHOLD = 14;
|
|
@@ -41162,7 +41252,7 @@ class GodClassPass {
|
|
|
41162
41252
|
}
|
|
41163
41253
|
}
|
|
41164
41254
|
|
|
41165
|
-
//
|
|
41255
|
+
// node_modules/circle-ir/dist/analysis/passes/naming-convention-pass.js
|
|
41166
41256
|
var PASCAL_CASE_RE = /^[A-Z][A-Za-z0-9]*$/;
|
|
41167
41257
|
var CAMEL_CASE_RE = /^[a-z][a-zA-Z0-9]*$/;
|
|
41168
41258
|
var SNAKE_CASE_RE = /^[a-z_][a-z0-9_]*$/;
|
|
@@ -41302,7 +41392,7 @@ class NamingConventionPass {
|
|
|
41302
41392
|
}
|
|
41303
41393
|
}
|
|
41304
41394
|
|
|
41305
|
-
//
|
|
41395
|
+
// node_modules/circle-ir/dist/analysis/passes/security-headers-pass.js
|
|
41306
41396
|
var HEADER_WRITE_METHODS = new Set([
|
|
41307
41397
|
"setHeader",
|
|
41308
41398
|
"addHeader",
|
|
@@ -41763,7 +41853,7 @@ function mapReturnValueToCorsRule(returnValue) {
|
|
|
41763
41853
|
};
|
|
41764
41854
|
}
|
|
41765
41855
|
|
|
41766
|
-
//
|
|
41856
|
+
// node_modules/circle-ir/dist/analysis/passes/_fp-allowlists.js
|
|
41767
41857
|
var PEM_BODY_RE = /[A-Za-z0-9+/]{30,}/;
|
|
41768
41858
|
function pemHasInlineBody(lines, hitLineIdx) {
|
|
41769
41859
|
const end = Math.min(hitLineIdx + 5, lines.length);
|
|
@@ -41790,7 +41880,7 @@ function isProtocolMandatedCryptoFile(file, code) {
|
|
|
41790
41880
|
return false;
|
|
41791
41881
|
}
|
|
41792
41882
|
|
|
41793
|
-
//
|
|
41883
|
+
// node_modules/circle-ir/dist/analysis/passes/scan-secrets-pass.js
|
|
41794
41884
|
function applyDemoDowngrade(demoPath, severity, level) {
|
|
41795
41885
|
if (!demoPath)
|
|
41796
41886
|
return { severity, level };
|
|
@@ -42368,7 +42458,7 @@ class ScanSecretsPass {
|
|
|
42368
42458
|
}
|
|
42369
42459
|
}
|
|
42370
42460
|
|
|
42371
|
-
//
|
|
42461
|
+
// node_modules/circle-ir/dist/analysis/passes/python-receiver-taint-format-pass.js
|
|
42372
42462
|
class PythonReceiverTaintFormatPass {
|
|
42373
42463
|
name = "python-receiver-taint-format";
|
|
42374
42464
|
category = "security";
|
|
@@ -42420,7 +42510,7 @@ class PythonReceiverTaintFormatPass {
|
|
|
42420
42510
|
}
|
|
42421
42511
|
}
|
|
42422
42512
|
|
|
42423
|
-
//
|
|
42513
|
+
// node_modules/circle-ir/dist/analysis/passes/spring4shell-pass.js
|
|
42424
42514
|
var CONTROLLER_ANNOTATIONS = new Set([
|
|
42425
42515
|
"Controller",
|
|
42426
42516
|
"RestController",
|
|
@@ -42628,7 +42718,7 @@ function isPotentialPojo(type) {
|
|
|
42628
42718
|
return first >= 65 && first <= 90;
|
|
42629
42719
|
}
|
|
42630
42720
|
|
|
42631
|
-
//
|
|
42721
|
+
// node_modules/circle-ir/dist/analysis/passes/insecure-cookie-pass.js
|
|
42632
42722
|
var COOKIE_RESPONSE_RECEIVERS = new Set([
|
|
42633
42723
|
"res",
|
|
42634
42724
|
"response",
|
|
@@ -42864,7 +42954,7 @@ class InsecureCookiePass {
|
|
|
42864
42954
|
}
|
|
42865
42955
|
}
|
|
42866
42956
|
|
|
42867
|
-
//
|
|
42957
|
+
// node_modules/circle-ir/dist/analysis/passes/weak-hash-pass.js
|
|
42868
42958
|
var WEAK_HASH_NAMES = new Set([
|
|
42869
42959
|
"md2",
|
|
42870
42960
|
"md4",
|
|
@@ -43084,7 +43174,7 @@ class WeakHashPass {
|
|
|
43084
43174
|
}
|
|
43085
43175
|
}
|
|
43086
43176
|
|
|
43087
|
-
//
|
|
43177
|
+
// node_modules/circle-ir/dist/analysis/path-classification.js
|
|
43088
43178
|
var TEST_PATH_PATTERNS = [
|
|
43089
43179
|
/(^|\/)test\//i,
|
|
43090
43180
|
/(^|\/)tests\//i,
|
|
@@ -43121,7 +43211,7 @@ function isTestPath(filepath) {
|
|
|
43121
43211
|
return false;
|
|
43122
43212
|
}
|
|
43123
43213
|
|
|
43124
|
-
//
|
|
43214
|
+
// node_modules/circle-ir/dist/analysis/passes/weak-crypto-pass.js
|
|
43125
43215
|
var WEAK_CIPHER_BASES = new Set([
|
|
43126
43216
|
"des",
|
|
43127
43217
|
"3des",
|
|
@@ -43626,7 +43716,7 @@ class WeakCryptoPass {
|
|
|
43626
43716
|
}
|
|
43627
43717
|
}
|
|
43628
43718
|
|
|
43629
|
-
//
|
|
43719
|
+
// node_modules/circle-ir/dist/analysis/passes/weak-random-pass.js
|
|
43630
43720
|
var JAVA_RANDOM_METHODS = new Set([
|
|
43631
43721
|
"nextInt",
|
|
43632
43722
|
"nextLong",
|
|
@@ -43799,7 +43889,7 @@ class WeakRandomPass {
|
|
|
43799
43889
|
}
|
|
43800
43890
|
}
|
|
43801
43891
|
|
|
43802
|
-
//
|
|
43892
|
+
// node_modules/circle-ir/dist/analysis/passes/_credential-helpers.js
|
|
43803
43893
|
var CRED_KEYWORD_RE2 = /(?:password|passwd|pwd|secret|api[_-]?key|auth[_-]?token|private[_-]?key|access[_-]?key|credential)/i;
|
|
43804
43894
|
function isCredentialIdentifier(name2) {
|
|
43805
43895
|
if (!name2)
|
|
@@ -43892,7 +43982,7 @@ function priorHashOf(varName, priorCalls) {
|
|
|
43892
43982
|
return false;
|
|
43893
43983
|
}
|
|
43894
43984
|
|
|
43895
|
-
//
|
|
43985
|
+
// node_modules/circle-ir/dist/analysis/passes/weak-password-hash-pass.js
|
|
43896
43986
|
var FAST_HASH_NAMES = new Set([
|
|
43897
43987
|
"sha224",
|
|
43898
43988
|
"sha-224",
|
|
@@ -44051,7 +44141,7 @@ class WeakPasswordHashPass {
|
|
|
44051
44141
|
}
|
|
44052
44142
|
}
|
|
44053
44143
|
|
|
44054
|
-
//
|
|
44144
|
+
// node_modules/circle-ir/dist/analysis/passes/weak-password-encoding-pass.js
|
|
44055
44145
|
function isBasicAuthContext(call, code) {
|
|
44056
44146
|
const line = call.location.line;
|
|
44057
44147
|
if (line < 1)
|
|
@@ -44163,7 +44253,7 @@ class WeakPasswordEncodingPass {
|
|
|
44163
44253
|
}
|
|
44164
44254
|
}
|
|
44165
44255
|
|
|
44166
|
-
//
|
|
44256
|
+
// node_modules/circle-ir/dist/analysis/passes/info-disclosure-stacktrace-pass.js
|
|
44167
44257
|
var RESPONSE_RECEIVER_RE = /^(res|response|w|writer|ctx|c)$/i;
|
|
44168
44258
|
var LOGGER_RECEIVER_RE = /^(log|logger|slog|console|pino|winston|sentry)$/i;
|
|
44169
44259
|
var RESPONSE_SEND_METHODS = new Set([
|
|
@@ -44349,7 +44439,7 @@ class InfoDisclosureStacktracePass {
|
|
|
44349
44439
|
}
|
|
44350
44440
|
}
|
|
44351
44441
|
|
|
44352
|
-
//
|
|
44442
|
+
// node_modules/circle-ir/dist/analysis/passes/unrestricted-file-upload-pass.js
|
|
44353
44443
|
var UPLOAD_NAME_RE = /(?:getOriginalFilename|getSubmittedFileName|originalname|originalName|\.filename|\.Filename|FileHeader\.Filename|UploadFile)/;
|
|
44354
44444
|
var FILE_SAFE_CALL_RE = /(?:secure_filename|FilenameUtils\.getExtension|\.lastIndexOf\(['"]\.['"]\)|ALLOWED_EXT|ALLOWED_EXTENSIONS|allowedExtensions|\bfileFilter\b|filepath\.Ext|path\.extname)/;
|
|
44355
44445
|
function lineWindow(lines, startLine, endLine) {
|
|
@@ -44500,7 +44590,7 @@ class UnrestrictedFileUploadPass {
|
|
|
44500
44590
|
}
|
|
44501
44591
|
}
|
|
44502
44592
|
|
|
44503
|
-
//
|
|
44593
|
+
// node_modules/circle-ir/dist/analysis/passes/missing-sanitizer-gate-pass.js
|
|
44504
44594
|
var HTML_OUTPUT_SINKS = new Set([
|
|
44505
44595
|
"addAttribute",
|
|
44506
44596
|
"setAttribute",
|
|
@@ -44648,7 +44738,7 @@ function methodAcceptsHtmlShapedParam(method) {
|
|
|
44648
44738
|
return false;
|
|
44649
44739
|
}
|
|
44650
44740
|
|
|
44651
|
-
//
|
|
44741
|
+
// node_modules/circle-ir/dist/analysis/passes/insecure-deserialization-config-pass.js
|
|
44652
44742
|
var ANY_TYPE_PERMISSION_RE = /\bAnyTypePermission\b/;
|
|
44653
44743
|
|
|
44654
44744
|
class InsecureDeserializationConfigPass {
|
|
@@ -44726,7 +44816,7 @@ class InsecureDeserializationConfigPass {
|
|
|
44726
44816
|
}
|
|
44727
44817
|
var INSECURE_TYPE_NAME_HANDLING_RE = /\bTypeNameHandling\s*=\s*(?:Newtonsoft\.Json\.)?TypeNameHandling\.(All|Auto|Objects|Arrays)\b/;
|
|
44728
44818
|
|
|
44729
|
-
//
|
|
44819
|
+
// node_modules/circle-ir/dist/analysis/passes/plaintext-password-storage-pass.js
|
|
44730
44820
|
function isWriteStorageCall(call, language) {
|
|
44731
44821
|
const method = call.method_name ?? "";
|
|
44732
44822
|
const receiver = call.receiver ?? "";
|
|
@@ -44837,7 +44927,7 @@ class PlaintextPasswordStoragePass {
|
|
|
44837
44927
|
}
|
|
44838
44928
|
}
|
|
44839
44929
|
|
|
44840
|
-
//
|
|
44930
|
+
// node_modules/circle-ir/dist/analysis/passes/cleartext-credential-transport-pass.js
|
|
44841
44931
|
var LOCALHOST_RE = /^(?:localhost|127\.0\.0\.1|0\.0\.0\.0)(?::\d+)?$/i;
|
|
44842
44932
|
function isInsecureHttpUrl(urlLiteral) {
|
|
44843
44933
|
if (!urlLiteral)
|
|
@@ -44965,7 +45055,7 @@ class CleartextCredentialTransportPass {
|
|
|
44965
45055
|
}
|
|
44966
45056
|
}
|
|
44967
45057
|
|
|
44968
|
-
//
|
|
45058
|
+
// node_modules/circle-ir/dist/analysis/passes/tls-verify-disabled-pass.js
|
|
44969
45059
|
var PY_HTTP_METHODS = new Set([
|
|
44970
45060
|
"get",
|
|
44971
45061
|
"post",
|
|
@@ -45178,7 +45268,7 @@ class TlsVerifyDisabledPass {
|
|
|
45178
45268
|
}
|
|
45179
45269
|
}
|
|
45180
45270
|
|
|
45181
|
-
//
|
|
45271
|
+
// node_modules/circle-ir/dist/analysis/passes/module-side-effect-pass.js
|
|
45182
45272
|
var JS_EXEC_METHODS = new Set([
|
|
45183
45273
|
"exec",
|
|
45184
45274
|
"spawn",
|
|
@@ -45409,7 +45499,7 @@ class ModuleSideEffectPass {
|
|
|
45409
45499
|
}
|
|
45410
45500
|
}
|
|
45411
45501
|
|
|
45412
|
-
//
|
|
45502
|
+
// node_modules/circle-ir/dist/analysis/passes/cache-no-vary-pass.js
|
|
45413
45503
|
function isSharedCacheable(value) {
|
|
45414
45504
|
const v = value.toLowerCase();
|
|
45415
45505
|
if (/\b(private|no-store|no-cache)\b/.test(v))
|
|
@@ -45696,7 +45786,7 @@ class CacheNoVaryPass {
|
|
|
45696
45786
|
}
|
|
45697
45787
|
}
|
|
45698
45788
|
|
|
45699
|
-
//
|
|
45789
|
+
// node_modules/circle-ir/dist/analysis/passes/jwt-verify-disabled-pass.js
|
|
45700
45790
|
var PY_VERIFY_SIGNATURE_FALSE_RE = /["']verify_signature["']\s*:\s*False\b/;
|
|
45701
45791
|
var PY_VERIFY_KW_FALSE_RE = /\bverify\s*=\s*False\b/;
|
|
45702
45792
|
var PY_ALG_NONE_RE = /\balgorithms\s*=\s*[\[\(]\s*["']none["']/i;
|
|
@@ -45821,7 +45911,7 @@ class JwtVerifyDisabledPass {
|
|
|
45821
45911
|
}
|
|
45822
45912
|
}
|
|
45823
45913
|
|
|
45824
|
-
//
|
|
45914
|
+
// node_modules/circle-ir/dist/analysis/passes/csrf-protection-disabled-pass.js
|
|
45825
45915
|
var JAVA_CSRF_DISABLE_RE = /\.csrf\s*\([^)]*\)\s*\.\s*disable\b/;
|
|
45826
45916
|
var JAVA_CSRF_LAMBDA_DISABLE_RE = /\bcsrf\s*\(\s*\w+\s*->\s*\w+\s*\.\s*disable\s*\(/;
|
|
45827
45917
|
var JAVA_CSRF_METHODREF_RE = /\bcsrf\s*\(\s*[\w.]+::disable\s*\)/;
|
|
@@ -45957,7 +46047,7 @@ class CsrfProtectionDisabledPass {
|
|
|
45957
46047
|
}
|
|
45958
46048
|
}
|
|
45959
46049
|
|
|
45960
|
-
//
|
|
46050
|
+
// node_modules/circle-ir/dist/analysis/passes/xml-entity-expansion-pass.js
|
|
45961
46051
|
var JAVA_FACTORIES = new Set([
|
|
45962
46052
|
"SAXParserFactory",
|
|
45963
46053
|
"DocumentBuilderFactory",
|
|
@@ -46097,7 +46187,7 @@ class XmlEntityExpansionPass {
|
|
|
46097
46187
|
}
|
|
46098
46188
|
}
|
|
46099
46189
|
|
|
46100
|
-
//
|
|
46190
|
+
// node_modules/circle-ir/dist/analysis/passes/mass-assignment-pass.js
|
|
46101
46191
|
var PY_KWARGS_SPLAT_RE = /\*\*\s*(?:request|self\.request|flask\.request|ctx|self)\s*\.\s*(?:form|args|values|json|get_json\s*\(\s*\)|files|data)/;
|
|
46102
46192
|
var JS_OBJECT_SPREAD_RE = /\{\s*\.\.\.\s*(?:req|request|ctx|context)(?:\.request)?\s*\.\s*(?:body|query|params|form)\b/;
|
|
46103
46193
|
|
|
@@ -46181,7 +46271,7 @@ class MassAssignmentPass {
|
|
|
46181
46271
|
}
|
|
46182
46272
|
}
|
|
46183
46273
|
|
|
46184
|
-
//
|
|
46274
|
+
// node_modules/circle-ir/dist/graph/import-graph.js
|
|
46185
46275
|
function dirname(filePath) {
|
|
46186
46276
|
const idx = filePath.lastIndexOf("/");
|
|
46187
46277
|
return idx >= 0 ? filePath.slice(0, idx) : "";
|
|
@@ -46314,7 +46404,7 @@ class ImportGraph2 {
|
|
|
46314
46404
|
}
|
|
46315
46405
|
}
|
|
46316
46406
|
|
|
46317
|
-
//
|
|
46407
|
+
// node_modules/circle-ir/dist/analysis/passes/circular-dependency-pass.js
|
|
46318
46408
|
class CircularDependencyPass {
|
|
46319
46409
|
run(_projectGraph, importGraph) {
|
|
46320
46410
|
const findings = [];
|
|
@@ -46341,7 +46431,7 @@ class CircularDependencyPass {
|
|
|
46341
46431
|
}
|
|
46342
46432
|
}
|
|
46343
46433
|
|
|
46344
|
-
//
|
|
46434
|
+
// node_modules/circle-ir/dist/analysis/passes/orphan-module-pass.js
|
|
46345
46435
|
class OrphanModulePass {
|
|
46346
46436
|
run(_projectGraph, importGraph) {
|
|
46347
46437
|
const findings = [];
|
|
@@ -46365,7 +46455,7 @@ class OrphanModulePass {
|
|
|
46365
46455
|
}
|
|
46366
46456
|
}
|
|
46367
46457
|
|
|
46368
|
-
//
|
|
46458
|
+
// node_modules/circle-ir/dist/analysis/metrics/passes/size-metrics-pass.js
|
|
46369
46459
|
class SizeMetricsPass {
|
|
46370
46460
|
name = "size-metrics";
|
|
46371
46461
|
run(ctx) {
|
|
@@ -46421,7 +46511,7 @@ class SizeMetricsPass {
|
|
|
46421
46511
|
}
|
|
46422
46512
|
}
|
|
46423
46513
|
|
|
46424
|
-
//
|
|
46514
|
+
// node_modules/circle-ir/dist/analysis/metrics/passes/complexity-metrics-pass.js
|
|
46425
46515
|
class ComplexityMetricsPass {
|
|
46426
46516
|
name = "complexity-metrics";
|
|
46427
46517
|
run(ctx) {
|
|
@@ -46485,7 +46575,7 @@ class ComplexityMetricsPass {
|
|
|
46485
46575
|
}
|
|
46486
46576
|
}
|
|
46487
46577
|
|
|
46488
|
-
//
|
|
46578
|
+
// node_modules/circle-ir/dist/analysis/metrics/passes/halstead-metrics-pass.js
|
|
46489
46579
|
var KEYWORDS = new Set([
|
|
46490
46580
|
"if",
|
|
46491
46581
|
"else",
|
|
@@ -46640,7 +46730,7 @@ class HalsteadMetricsPass {
|
|
|
46640
46730
|
}
|
|
46641
46731
|
}
|
|
46642
46732
|
|
|
46643
|
-
//
|
|
46733
|
+
// node_modules/circle-ir/dist/analysis/metrics/passes/data-flow-metrics-pass.js
|
|
46644
46734
|
class DataFlowMetricsPass {
|
|
46645
46735
|
name = "data-flow-metrics";
|
|
46646
46736
|
run(ctx) {
|
|
@@ -46658,7 +46748,7 @@ class DataFlowMetricsPass {
|
|
|
46658
46748
|
}
|
|
46659
46749
|
}
|
|
46660
46750
|
|
|
46661
|
-
//
|
|
46751
|
+
// node_modules/circle-ir/dist/analysis/metrics/passes/coupling-metrics-pass.js
|
|
46662
46752
|
class CouplingMetricsPass {
|
|
46663
46753
|
name = "coupling-metrics";
|
|
46664
46754
|
run(ctx) {
|
|
@@ -46736,7 +46826,7 @@ class CouplingMetricsPass {
|
|
|
46736
46826
|
}
|
|
46737
46827
|
}
|
|
46738
46828
|
|
|
46739
|
-
//
|
|
46829
|
+
// node_modules/circle-ir/dist/analysis/metrics/passes/inheritance-metrics-pass.js
|
|
46740
46830
|
class InheritanceMetricsPass {
|
|
46741
46831
|
name = "inheritance-metrics";
|
|
46742
46832
|
run(ctx) {
|
|
@@ -46796,7 +46886,7 @@ class InheritanceMetricsPass {
|
|
|
46796
46886
|
}
|
|
46797
46887
|
}
|
|
46798
46888
|
|
|
46799
|
-
//
|
|
46889
|
+
// node_modules/circle-ir/dist/analysis/metrics/passes/cohesion-metrics-pass.js
|
|
46800
46890
|
class CohesionMetricsPass {
|
|
46801
46891
|
name = "cohesion-metrics";
|
|
46802
46892
|
run(ctx) {
|
|
@@ -46879,7 +46969,7 @@ class CohesionMetricsPass {
|
|
|
46879
46969
|
}
|
|
46880
46970
|
}
|
|
46881
46971
|
|
|
46882
|
-
//
|
|
46972
|
+
// node_modules/circle-ir/dist/analysis/metrics/passes/documentation-metrics-pass.js
|
|
46883
46973
|
class DocumentationMetricsPass {
|
|
46884
46974
|
name = "documentation-metrics";
|
|
46885
46975
|
run(ctx) {
|
|
@@ -46932,7 +47022,7 @@ class DocumentationMetricsPass {
|
|
|
46932
47022
|
}
|
|
46933
47023
|
}
|
|
46934
47024
|
|
|
46935
|
-
//
|
|
47025
|
+
// node_modules/circle-ir/dist/analysis/metrics/passes/composite-metrics-pass.js
|
|
46936
47026
|
class CompositeMetricsPass {
|
|
46937
47027
|
name = "composite-metrics";
|
|
46938
47028
|
run(ctx) {
|
|
@@ -46991,7 +47081,7 @@ class CompositeMetricsPass {
|
|
|
46991
47081
|
}
|
|
46992
47082
|
}
|
|
46993
47083
|
|
|
46994
|
-
//
|
|
47084
|
+
// node_modules/circle-ir/dist/analysis/metrics/metric-runner.js
|
|
46995
47085
|
class MetricRunner {
|
|
46996
47086
|
passes = [
|
|
46997
47087
|
new SizeMetricsPass,
|
|
@@ -47013,7 +47103,7 @@ class MetricRunner {
|
|
|
47013
47103
|
return accumulated;
|
|
47014
47104
|
}
|
|
47015
47105
|
}
|
|
47016
|
-
//
|
|
47106
|
+
// node_modules/circle-ir/dist/analyzer.js
|
|
47017
47107
|
var initialized = false;
|
|
47018
47108
|
async function initAnalyzer(options = {}) {
|
|
47019
47109
|
if (initialized)
|
|
@@ -47685,7 +47775,7 @@ function deriveProjectRoot(paths) {
|
|
|
47685
47775
|
}
|
|
47686
47776
|
return common.join("/") || "/";
|
|
47687
47777
|
}
|
|
47688
|
-
//
|
|
47778
|
+
// node_modules/circle-ir/dist/analysis/sbom.js
|
|
47689
47779
|
function purlVersion(spec) {
|
|
47690
47780
|
const stripped = spec.trim().replace(/^[\s^~=<>]+/, "");
|
|
47691
47781
|
if (/^v?[0-9][\w.\-+]*$/.test(stripped))
|
|
@@ -48731,7 +48821,7 @@ var colors = {
|
|
|
48731
48821
|
};
|
|
48732
48822
|
|
|
48733
48823
|
// src/version.ts
|
|
48734
|
-
var version = "4.9.
|
|
48824
|
+
var version = "4.9.10";
|
|
48735
48825
|
|
|
48736
48826
|
// src/formatters.ts
|
|
48737
48827
|
var LIBRARY_API_SURFACE_TAG2 = "library-api-surface:caller-responsibility";
|
|
@@ -49284,8 +49374,8 @@ function generateSarifResults(results, crossFileData) {
|
|
|
49284
49374
|
|
|
49285
49375
|
// src/build-info.ts
|
|
49286
49376
|
var buildInfo = {
|
|
49287
|
-
gitSha: "
|
|
49288
|
-
builtAt: "2026-
|
|
49377
|
+
gitSha: "132eaf6",
|
|
49378
|
+
builtAt: "2026-09-02T06:21:26.855Z"
|
|
49289
49379
|
};
|
|
49290
49380
|
|
|
49291
49381
|
// src/utils/args.ts
|