cognium-dev 4.9.9 → 4.9.11
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 +309 -309
- package/package.json +3 -3
package/dist/cli.js
CHANGED
|
@@ -5,7 +5,7 @@ var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
|
5
5
|
// src/cli.ts
|
|
6
6
|
import { readFileSync, existsSync, writeFileSync } from "fs";
|
|
7
7
|
import { stat as stat2, readdir as readdir2 } from "fs/promises";
|
|
8
|
-
import { join as join2, dirname as
|
|
8
|
+
import { join as join2, dirname as dirname2, extname, resolve, relative as relative3, basename } from "path";
|
|
9
9
|
import { createRequire as createRequire2 } from "module";
|
|
10
10
|
|
|
11
11
|
// ../../node_modules/web-tree-sitter/web-tree-sitter.js
|
|
@@ -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);
|
|
@@ -5338,6 +5338,27 @@ var CSHARP_COMMAND_EXECUTE_METHODS = new Set([
|
|
|
5338
5338
|
"ExecuteReaderAsync",
|
|
5339
5339
|
"ExecuteNonQueryAsync"
|
|
5340
5340
|
]);
|
|
5341
|
+
var CSHARP_RECEIVER_URL_METHODS = new Set([
|
|
5342
|
+
"GetAsync",
|
|
5343
|
+
"PostAsync",
|
|
5344
|
+
"PutAsync",
|
|
5345
|
+
"PatchAsync",
|
|
5346
|
+
"DeleteAsync",
|
|
5347
|
+
"HeadAsync",
|
|
5348
|
+
"GetStringAsync",
|
|
5349
|
+
"GetByteArrayAsync",
|
|
5350
|
+
"GetStreamAsync",
|
|
5351
|
+
"GetJsonAsync"
|
|
5352
|
+
]);
|
|
5353
|
+
var CSHARP_HEADER_RECEIVER_RE = /(^|\.)Headers$/;
|
|
5354
|
+
function csharpBareName(node) {
|
|
5355
|
+
if (node.type === "generic_name") {
|
|
5356
|
+
const id = node.childForFieldName("name") ?? node.namedChild(0);
|
|
5357
|
+
if (id)
|
|
5358
|
+
return getNodeText(id);
|
|
5359
|
+
}
|
|
5360
|
+
return getNodeText(node);
|
|
5361
|
+
}
|
|
5341
5362
|
function extractCSharpCalls(tree, cache) {
|
|
5342
5363
|
const calls = [];
|
|
5343
5364
|
const typeMap = buildCSharpReceiverTypeMap(tree, cache);
|
|
@@ -5349,16 +5370,22 @@ function extractCSharpCalls(tree, cache) {
|
|
|
5349
5370
|
if (fn?.type === "member_access_expression") {
|
|
5350
5371
|
const nameNode = fn.childForFieldName("name");
|
|
5351
5372
|
const exprNode = fn.childForFieldName("expression");
|
|
5352
|
-
methodName = nameNode ?
|
|
5373
|
+
methodName = nameNode ? csharpBareName(nameNode) : "unknown";
|
|
5353
5374
|
receiver = exprNode ? getNodeText(exprNode) : null;
|
|
5354
5375
|
} else if (fn) {
|
|
5355
|
-
methodName =
|
|
5376
|
+
methodName = csharpBareName(fn);
|
|
5356
5377
|
}
|
|
5357
5378
|
const argsNode = inv.childForFieldName("arguments");
|
|
5358
5379
|
let args2 = argsNode ? extractCSharpArguments(argsNode) : [];
|
|
5359
5380
|
if (receiver && CSHARP_COMMAND_EXECUTE_METHODS.has(methodName)) {
|
|
5360
5381
|
args2 = [{ position: 0, expression: receiver, variable: receiver, literal: null, value: null }, ...args2];
|
|
5361
5382
|
}
|
|
5383
|
+
if (methodName === "Add" && receiver && CSHARP_HEADER_RECEIVER_RE.test(receiver)) {
|
|
5384
|
+
methodName = "AddHeader";
|
|
5385
|
+
}
|
|
5386
|
+
if (receiver && args2.length === 0 && CSHARP_RECEIVER_URL_METHODS.has(methodName)) {
|
|
5387
|
+
args2 = [{ position: 0, expression: receiver, variable: receiver, literal: null, value: null }];
|
|
5388
|
+
}
|
|
5362
5389
|
calls.push({
|
|
5363
5390
|
method_name: methodName,
|
|
5364
5391
|
receiver,
|
|
@@ -5374,7 +5401,7 @@ function extractCSharpCalls(tree, cache) {
|
|
|
5374
5401
|
const typeNode = creation.childForFieldName("type");
|
|
5375
5402
|
const argsNode = creation.childForFieldName("arguments");
|
|
5376
5403
|
calls.push({
|
|
5377
|
-
method_name: typeNode ?
|
|
5404
|
+
method_name: typeNode ? csharpBareName(typeNode) : "unknown",
|
|
5378
5405
|
receiver: null,
|
|
5379
5406
|
receiver_type: null,
|
|
5380
5407
|
receiver_type_fqn: null,
|
|
@@ -5387,6 +5414,41 @@ function extractCSharpCalls(tree, cache) {
|
|
|
5387
5414
|
const assignments = getNodesFromCache(tree.rootNode, "assignment_expression", cache);
|
|
5388
5415
|
for (const asn of assignments) {
|
|
5389
5416
|
const left = asn.childForFieldName("left");
|
|
5417
|
+
if (left?.type === "element_access_expression") {
|
|
5418
|
+
const target = left.childForFieldName("expression");
|
|
5419
|
+
const right2 = asn.childForFieldName("right");
|
|
5420
|
+
if (!target || !right2)
|
|
5421
|
+
continue;
|
|
5422
|
+
if (!CSHARP_HEADER_RECEIVER_RE.test(getNodeText(target)))
|
|
5423
|
+
continue;
|
|
5424
|
+
const subscript = left.childForFieldName("subscript") ?? left.namedChild(1);
|
|
5425
|
+
const rhsText2 = getNodeText(right2);
|
|
5426
|
+
calls.push({
|
|
5427
|
+
method_name: "AddHeader",
|
|
5428
|
+
receiver: getNodeText(target),
|
|
5429
|
+
receiver_type: null,
|
|
5430
|
+
receiver_type_fqn: null,
|
|
5431
|
+
arguments: [
|
|
5432
|
+
{
|
|
5433
|
+
position: 0,
|
|
5434
|
+
expression: subscript ? getNodeText(subscript) : "",
|
|
5435
|
+
variable: null,
|
|
5436
|
+
literal: subscript ? getNodeText(subscript) : null,
|
|
5437
|
+
value: null
|
|
5438
|
+
},
|
|
5439
|
+
{
|
|
5440
|
+
position: 1,
|
|
5441
|
+
expression: rhsText2,
|
|
5442
|
+
variable: right2.type === "identifier" ? rhsText2 : null,
|
|
5443
|
+
literal: right2.type === "string_literal" ? rhsText2 : null,
|
|
5444
|
+
value: null
|
|
5445
|
+
}
|
|
5446
|
+
],
|
|
5447
|
+
location: { line: asn.startPosition.row + 1, column: asn.startPosition.column },
|
|
5448
|
+
in_method: findEnclosingMethod(asn)
|
|
5449
|
+
});
|
|
5450
|
+
continue;
|
|
5451
|
+
}
|
|
5390
5452
|
if (left?.type !== "member_access_expression")
|
|
5391
5453
|
continue;
|
|
5392
5454
|
const nameNode = left.childForFieldName("name");
|
|
@@ -7274,7 +7336,7 @@ function extractGoTypeLastSegment(typeNode) {
|
|
|
7274
7336
|
}
|
|
7275
7337
|
return null;
|
|
7276
7338
|
}
|
|
7277
|
-
//
|
|
7339
|
+
// node_modules/circle-ir/dist/core/extractors/imports.js
|
|
7278
7340
|
function detectLanguage2(tree) {
|
|
7279
7341
|
const root = tree.rootNode;
|
|
7280
7342
|
const jsNodeTypes = new Set([
|
|
@@ -7961,7 +8023,7 @@ function findGoChildByType(node, type) {
|
|
|
7961
8023
|
}
|
|
7962
8024
|
return null;
|
|
7963
8025
|
}
|
|
7964
|
-
//
|
|
8026
|
+
// node_modules/circle-ir/dist/core/extractors/exports.js
|
|
7965
8027
|
function extractExports(types) {
|
|
7966
8028
|
const exports = [];
|
|
7967
8029
|
for (const type of types) {
|
|
@@ -8014,7 +8076,7 @@ function getVisibilityFromModifiers(modifiers) {
|
|
|
8014
8076
|
}
|
|
8015
8077
|
return "package";
|
|
8016
8078
|
}
|
|
8017
|
-
//
|
|
8079
|
+
// node_modules/circle-ir/dist/core/extractors/cfg.js
|
|
8018
8080
|
function detectLanguage3(tree) {
|
|
8019
8081
|
const root = tree.rootNode;
|
|
8020
8082
|
const jsNodeTypes = new Set([
|
|
@@ -8663,7 +8725,7 @@ function isGoStatement(node) {
|
|
|
8663
8725
|
]);
|
|
8664
8726
|
return goStatementTypes.has(node.type);
|
|
8665
8727
|
}
|
|
8666
|
-
//
|
|
8728
|
+
// node_modules/circle-ir/dist/core/extractors/dfg.js
|
|
8667
8729
|
function detectLanguage4(tree) {
|
|
8668
8730
|
const root = tree.rootNode;
|
|
8669
8731
|
const jsNodeTypes = new Set([
|
|
@@ -10184,7 +10246,7 @@ function extractGoAddressableVarName(node) {
|
|
|
10184
10246
|
}
|
|
10185
10247
|
return null;
|
|
10186
10248
|
}
|
|
10187
|
-
//
|
|
10249
|
+
// node_modules/circle-ir/dist/core/extractors/runtime-registrations.js
|
|
10188
10250
|
var HTTP_VERB_METHODS = new Set([
|
|
10189
10251
|
"get",
|
|
10190
10252
|
"post",
|
|
@@ -10932,7 +10994,7 @@ function parseDistributedSliceAttribute(attrItem) {
|
|
|
10932
10994
|
}
|
|
10933
10995
|
};
|
|
10934
10996
|
}
|
|
10935
|
-
//
|
|
10997
|
+
// node_modules/circle-ir/dist/analysis/config-loader.js
|
|
10936
10998
|
var DEFAULT_SOURCES = [
|
|
10937
10999
|
{ method: "getParameter", class: "HttpServletRequest", type: "http_param", severity: "high", return_tainted: true },
|
|
10938
11000
|
{ method: "getParameterValues", class: "HttpServletRequest", type: "http_param", severity: "high", return_tainted: true },
|
|
@@ -12474,6 +12536,17 @@ var DEFAULT_SINKS = [
|
|
|
12474
12536
|
{ method: "ExecuteSqlRawAsync", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
|
|
12475
12537
|
{ method: "FromSqlRaw", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
|
|
12476
12538
|
{ method: "FromSqlRawAsync", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
|
|
12539
|
+
{ method: "Query", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
|
|
12540
|
+
{ method: "QueryAsync", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
|
|
12541
|
+
{ method: "QueryFirst", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
|
|
12542
|
+
{ method: "QueryFirstAsync", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
|
|
12543
|
+
{ method: "QueryFirstOrDefault", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
|
|
12544
|
+
{ method: "QueryFirstOrDefaultAsync", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
|
|
12545
|
+
{ method: "QuerySingle", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
|
|
12546
|
+
{ method: "QuerySingleOrDefault", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
|
|
12547
|
+
{ method: "QueryMultiple", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
|
|
12548
|
+
{ method: "Execute", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
|
|
12549
|
+
{ method: "ExecuteAsync", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
|
|
12477
12550
|
{ method: "CommandText", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
|
|
12478
12551
|
{ method: "Filter", type: "ldap_injection", cwe: "CWE-90", severity: "high", arg_positions: [0], languages: ["csharp"] },
|
|
12479
12552
|
{ method: "ExecuteScalar", type: "sql_injection", cwe: "CWE-89", severity: "critical", arg_positions: [0], languages: ["csharp"] },
|
|
@@ -12515,12 +12588,16 @@ var DEFAULT_SINKS = [
|
|
|
12515
12588
|
{ method: "DeleteAsync", type: "ssrf", cwe: "CWE-918", severity: "high", arg_positions: [0], languages: ["csharp"] },
|
|
12516
12589
|
{ method: "GetStringAsync", type: "ssrf", cwe: "CWE-918", severity: "high", arg_positions: [0], languages: ["csharp"] },
|
|
12517
12590
|
{ method: "GetByteArrayAsync", type: "ssrf", cwe: "CWE-918", severity: "high", arg_positions: [0], languages: ["csharp"] },
|
|
12591
|
+
{ method: "GetJsonAsync", type: "ssrf", cwe: "CWE-918", severity: "high", arg_positions: [0], languages: ["csharp"] },
|
|
12592
|
+
{ method: "PatchAsync", type: "ssrf", cwe: "CWE-918", severity: "high", arg_positions: [0], languages: ["csharp"] },
|
|
12593
|
+
{ method: "HeadAsync", type: "ssrf", cwe: "CWE-918", severity: "high", arg_positions: [0], languages: ["csharp"] },
|
|
12518
12594
|
{ method: "GetStreamAsync", type: "ssrf", cwe: "CWE-918", severity: "high", arg_positions: [0], languages: ["csharp"] },
|
|
12519
12595
|
{ method: "SendAsync", type: "ssrf", cwe: "CWE-918", severity: "high", arg_positions: [0], languages: ["csharp"] },
|
|
12520
12596
|
{ method: "DownloadString", type: "ssrf", cwe: "CWE-918", severity: "high", arg_positions: [0], languages: ["csharp"] },
|
|
12521
12597
|
{ method: "DownloadData", type: "ssrf", cwe: "CWE-918", severity: "high", arg_positions: [0], languages: ["csharp"] },
|
|
12522
12598
|
{ method: "DownloadFile", type: "ssrf", cwe: "CWE-918", severity: "high", arg_positions: [1], languages: ["csharp"] },
|
|
12523
12599
|
{ method: "Create", class: "WebRequest", type: "ssrf", cwe: "CWE-918", severity: "high", arg_positions: [0], languages: ["csharp"] },
|
|
12600
|
+
{ method: "RestClient", class: "constructor", type: "ssrf", cwe: "CWE-918", severity: "high", arg_positions: [0], languages: ["csharp"] },
|
|
12524
12601
|
{ method: "EvaluateAsync", type: "code_injection", cwe: "CWE-94", severity: "critical", arg_positions: [0], languages: ["csharp"] },
|
|
12525
12602
|
{ method: "RunAsync", class: "CSharpScript", type: "code_injection", cwe: "CWE-94", severity: "critical", arg_positions: [0], languages: ["csharp"] },
|
|
12526
12603
|
{ method: "Load", class: "Assembly", type: "code_injection", cwe: "CWE-94", severity: "critical", arg_positions: [0], languages: ["csharp"] },
|
|
@@ -12538,6 +12615,7 @@ var DEFAULT_SINKS = [
|
|
|
12538
12615
|
{ method: "Write", class: "Response", type: "xss", cwe: "CWE-79", severity: "high", arg_positions: [0], languages: ["csharp"] },
|
|
12539
12616
|
{ method: "HtmlString", type: "xss", cwe: "CWE-79", severity: "high", arg_positions: [0], languages: ["csharp"] },
|
|
12540
12617
|
{ method: "MarkupString", class: "constructor", type: "xss", cwe: "CWE-79", severity: "high", arg_positions: [0], languages: ["csharp"] },
|
|
12618
|
+
{ method: "Content", type: "xss", cwe: "CWE-79", severity: "high", arg_positions: [0], languages: ["csharp"] },
|
|
12541
12619
|
{ method: "Format", class: "String", type: "format_string", cwe: "CWE-134", severity: "medium", arg_positions: [0], languages: ["csharp"] },
|
|
12542
12620
|
{ method: "DirectorySearcher", type: "ldap_injection", cwe: "CWE-90", severity: "high", arg_positions: [0], languages: ["csharp"] },
|
|
12543
12621
|
{ method: "DirectoryEntry", type: "ldap_injection", cwe: "CWE-90", severity: "high", arg_positions: [0], languages: ["csharp"] },
|
|
@@ -12546,12 +12624,18 @@ var DEFAULT_SINKS = [
|
|
|
12546
12624
|
{ method: "AddHeader", type: "crlf", cwe: "CWE-113", severity: "medium", arg_positions: [1], languages: ["csharp"] },
|
|
12547
12625
|
{ method: "AppendHeader", type: "crlf", cwe: "CWE-113", severity: "medium", arg_positions: [1], languages: ["csharp"] },
|
|
12548
12626
|
{ method: "Parse", class: "BsonDocument", type: "nosql_injection", cwe: "CWE-943", severity: "high", arg_positions: [0], languages: ["csharp"] },
|
|
12627
|
+
{ method: "BsonJavaScript", class: "constructor", type: "nosql_injection", cwe: "CWE-943", severity: "high", arg_positions: [0], languages: ["csharp"] },
|
|
12549
12628
|
{ method: "LogInformation", type: "log_injection", cwe: "CWE-117", severity: "low", arg_positions: [0], languages: ["csharp"] },
|
|
12550
12629
|
{ method: "LogWarning", type: "log_injection", cwe: "CWE-117", severity: "low", arg_positions: [0], languages: ["csharp"] },
|
|
12551
12630
|
{ method: "LogError", type: "log_injection", cwe: "CWE-117", severity: "low", arg_positions: [0], languages: ["csharp"] },
|
|
12552
12631
|
{ method: "LogDebug", type: "log_injection", cwe: "CWE-117", severity: "low", arg_positions: [0], languages: ["csharp"] },
|
|
12553
12632
|
{ method: "LogCritical", type: "log_injection", cwe: "CWE-117", severity: "low", arg_positions: [0], languages: ["csharp"] },
|
|
12554
12633
|
{ method: "LogTrace", type: "log_injection", cwe: "CWE-117", severity: "low", arg_positions: [0], languages: ["csharp"] },
|
|
12634
|
+
{ method: "IsMatch", class: "Regex", type: "redos", cwe: "CWE-1333", severity: "medium", arg_positions: [1], languages: ["csharp"] },
|
|
12635
|
+
{ method: "Match", class: "Regex", type: "redos", cwe: "CWE-1333", severity: "medium", arg_positions: [1], languages: ["csharp"] },
|
|
12636
|
+
{ method: "Matches", class: "Regex", type: "redos", cwe: "CWE-1333", severity: "medium", arg_positions: [1], languages: ["csharp"] },
|
|
12637
|
+
{ method: "Replace", class: "Regex", type: "redos", cwe: "CWE-1333", severity: "medium", arg_positions: [1], languages: ["csharp"] },
|
|
12638
|
+
{ method: "Regex", class: "constructor", type: "redos", cwe: "CWE-1333", severity: "medium", arg_positions: [0], languages: ["csharp"] },
|
|
12555
12639
|
{ method: "Log", class: "ILogger", type: "log_injection", cwe: "CWE-117", severity: "low", arg_positions: [1], languages: ["csharp"] },
|
|
12556
12640
|
{ method: "SelectSingleNode", type: "xpath_injection", cwe: "CWE-643", severity: "high", arg_positions: [0], languages: ["csharp"] },
|
|
12557
12641
|
{ method: "SelectNodes", type: "xpath_injection", cwe: "CWE-643", severity: "high", arg_positions: [0], languages: ["csharp"] },
|
|
@@ -12691,6 +12775,8 @@ var DEFAULT_SANITIZERS = [
|
|
|
12691
12775
|
{ method: "encodeToString", removes: ["sql_injection", "command_injection", "xss", "path_traversal", "code_injection"] },
|
|
12692
12776
|
{ method: "encodeHexString", removes: ["sql_injection", "command_injection", "xss", "path_traversal", "code_injection"] },
|
|
12693
12777
|
{ method: "encodeForURL", removes: ["xss", "ssrf", "open_redirect"] },
|
|
12778
|
+
{ method: "IsLocalUrl", removes: ["open_redirect"] },
|
|
12779
|
+
{ method: "LocalRedirect", removes: ["open_redirect"] },
|
|
12694
12780
|
{ method: "encodeURL", removes: ["xss", "ssrf", "open_redirect"] },
|
|
12695
12781
|
{ method: "urlEncode", removes: ["xss", "ssrf", "open_redirect"] },
|
|
12696
12782
|
{ method: "escapeUrl", removes: ["xss", "ssrf", "open_redirect"] },
|
|
@@ -13011,7 +13097,7 @@ var DEFAULT_HEADER_RULES = [
|
|
|
13011
13097
|
note: "Fires when the value is not a string literal (likely reflected from request)"
|
|
13012
13098
|
}
|
|
13013
13099
|
];
|
|
13014
|
-
//
|
|
13100
|
+
// node_modules/circle-ir/dist/analysis/arg-type-resolver.js
|
|
13015
13101
|
function findEnclosingType(callInMethod, types) {
|
|
13016
13102
|
if (!callInMethod)
|
|
13017
13103
|
return null;
|
|
@@ -13089,7 +13175,7 @@ function isArgvContainerType(rawType) {
|
|
|
13089
13175
|
return /^(?:List|ArrayList|LinkedList|Collection|Iterable|Deque|Queue)\s*<\s*(?:String|CharSequence|java\.lang\.String)\b/.test(s);
|
|
13090
13176
|
}
|
|
13091
13177
|
|
|
13092
|
-
//
|
|
13178
|
+
// node_modules/circle-ir/dist/analysis/taint-matcher.js
|
|
13093
13179
|
var PYTHON_TAINTED_PATTERNS = [
|
|
13094
13180
|
{ pattern: /\brequest\.args\b/, sourceType: "http_param" },
|
|
13095
13181
|
{ pattern: /\brequest\.form\b/, sourceType: "http_body" },
|
|
@@ -15094,7 +15180,7 @@ function formatSanitizerMethod(call) {
|
|
|
15094
15180
|
return `${call.method_name}()`;
|
|
15095
15181
|
}
|
|
15096
15182
|
|
|
15097
|
-
//
|
|
15183
|
+
// node_modules/circle-ir/dist/analysis/unresolved.js
|
|
15098
15184
|
function detectUnresolved(calls, types, dfg) {
|
|
15099
15185
|
const unresolved = [];
|
|
15100
15186
|
unresolved.push(...detectVirtualDispatch(calls));
|
|
@@ -15258,7 +15344,7 @@ function formatCallCode(call) {
|
|
|
15258
15344
|
}
|
|
15259
15345
|
return `${call.method_name}(${args2})`;
|
|
15260
15346
|
}
|
|
15261
|
-
//
|
|
15347
|
+
// node_modules/circle-ir/dist/analysis/non-executable-lines.js
|
|
15262
15348
|
function isNonExecutableSourceLine(sourceCode, line, language) {
|
|
15263
15349
|
if (!sourceCode || line < 1)
|
|
15264
15350
|
return false;
|
|
@@ -15318,7 +15404,7 @@ function isNonExecutablePython(trimmed) {
|
|
|
15318
15404
|
return false;
|
|
15319
15405
|
}
|
|
15320
15406
|
|
|
15321
|
-
//
|
|
15407
|
+
// node_modules/circle-ir/dist/analysis/sanitizer-index.js
|
|
15322
15408
|
var SANITIZER_SET_CACHE = new WeakMap;
|
|
15323
15409
|
function getSanitizesSet(san) {
|
|
15324
15410
|
let s = SANITIZER_SET_CACHE.get(san);
|
|
@@ -15332,7 +15418,7 @@ function sanitizerCoversSink(san, sinkType) {
|
|
|
15332
15418
|
return getSanitizesSet(san).has(sinkType);
|
|
15333
15419
|
}
|
|
15334
15420
|
|
|
15335
|
-
//
|
|
15421
|
+
// node_modules/circle-ir/dist/analysis/dfg-walk.js
|
|
15336
15422
|
var walkBackwardDefsMemo = new WeakMap;
|
|
15337
15423
|
function walkBackwardDefs(startDefId, chainsByToDef, defById, options = {}) {
|
|
15338
15424
|
const maxHops = options.maxHops ?? 32;
|
|
@@ -15385,15 +15471,15 @@ function walkBackwardDefs(startDefId, chainsByToDef, defById, options = {}) {
|
|
|
15385
15471
|
return result;
|
|
15386
15472
|
}
|
|
15387
15473
|
|
|
15388
|
-
//
|
|
15474
|
+
// node_modules/circle-ir/dist/analysis/findings.js
|
|
15389
15475
|
function canSourceReachSink(sourceType, sinkType) {
|
|
15390
15476
|
const sourceToSinkMapping = {
|
|
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"],
|
|
15477
|
+
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", "xxe", "log_injection", "format_string", "nosql_injection", "prompt_injection"],
|
|
15392
15478
|
http_body: ["sql_injection", "command_injection", "deserialization", "xxe", "xss", "code_injection", "mybatis_mapper_call", "crlf", "mass_assignment", "open_redirect", "trust_boundary", "log_injection", "format_string", "nosql_injection", "prompt_injection"],
|
|
15393
15479
|
http_header: ["sql_injection", "xss", "ssrf", "mybatis_mapper_call", "code_injection", "crlf", "open_redirect", "trust_boundary", "log_injection", "format_string", "nosql_injection", "prompt_injection"],
|
|
15394
15480
|
http_cookie: ["sql_injection", "xss", "mybatis_mapper_call", "code_injection", "crlf", "open_redirect", "trust_boundary", "log_injection", "format_string", "nosql_injection", "prompt_injection"],
|
|
15395
15481
|
http_path: ["path_traversal", "sql_injection", "ssrf", "mybatis_mapper_call", "open_redirect", "trust_boundary", "xss", "log_injection", "format_string", "prompt_injection"],
|
|
15396
|
-
http_query: ["sql_injection", "command_injection", "xss", "ssrf", "mybatis_mapper_call", "code_injection", "crlf", "mass_assignment", "open_redirect", "trust_boundary", "deserialization", "log_injection", "format_string", "nosql_injection", "prompt_injection"],
|
|
15482
|
+
http_query: ["sql_injection", "command_injection", "xss", "ssrf", "mybatis_mapper_call", "code_injection", "crlf", "mass_assignment", "open_redirect", "trust_boundary", "deserialization", "xxe", "log_injection", "format_string", "nosql_injection", "prompt_injection"],
|
|
15397
15483
|
io_input: ["command_injection", "path_traversal", "deserialization", "xxe", "code_injection", "xss", "ssrf", "log_injection", "format_string", "prompt_injection"],
|
|
15398
15484
|
env_input: ["command_injection", "path_traversal"],
|
|
15399
15485
|
db_input: ["xss", "sql_injection", "log_injection"],
|
|
@@ -15416,7 +15502,7 @@ function sourceSemanticsAllowed(source, sinkType) {
|
|
|
15416
15502
|
return true;
|
|
15417
15503
|
}
|
|
15418
15504
|
|
|
15419
|
-
//
|
|
15505
|
+
// node_modules/circle-ir/dist/analysis/findings-instrumentation.js
|
|
15420
15506
|
var instrumentEnabled = false;
|
|
15421
15507
|
function setFindingsInstrumentation(enabled) {
|
|
15422
15508
|
instrumentEnabled = enabled;
|
|
@@ -15479,7 +15565,7 @@ function emitFindingsInstrumentation(filePath, findings, taint) {
|
|
|
15479
15565
|
};
|
|
15480
15566
|
console.error(`[findings-summary] ${JSON.stringify(summary)}`);
|
|
15481
15567
|
}
|
|
15482
|
-
//
|
|
15568
|
+
// node_modules/circle-ir/dist/graph/code-graph.js
|
|
15483
15569
|
class CodeGraph {
|
|
15484
15570
|
ir;
|
|
15485
15571
|
constructor(ir) {
|
|
@@ -15689,7 +15775,7 @@ class CodeGraph {
|
|
|
15689
15775
|
return result;
|
|
15690
15776
|
}
|
|
15691
15777
|
}
|
|
15692
|
-
//
|
|
15778
|
+
// node_modules/circle-ir/dist/resolution/type-hierarchy.js
|
|
15693
15779
|
class TypeHierarchyResolver {
|
|
15694
15780
|
types = new Map;
|
|
15695
15781
|
nameToFqn = new Map;
|
|
@@ -16261,7 +16347,7 @@ function registerCommonLibraries(resolver) {
|
|
|
16261
16347
|
resolver.registerFactoryReturnType("HttpClients", "createSystem", "org.apache.http.impl.client.CloseableHttpClient");
|
|
16262
16348
|
resolver.registerFactoryReturnType("HttpClients", "createMinimal", "org.apache.http.impl.client.MinimalHttpClient");
|
|
16263
16349
|
}
|
|
16264
|
-
//
|
|
16350
|
+
// node_modules/circle-ir/dist/resolution/symbol-table.js
|
|
16265
16351
|
class SymbolTable {
|
|
16266
16352
|
exports = new Map;
|
|
16267
16353
|
nameToFqns = new Map;
|
|
@@ -16484,7 +16570,7 @@ class SymbolTable {
|
|
|
16484
16570
|
return "package";
|
|
16485
16571
|
}
|
|
16486
16572
|
}
|
|
16487
|
-
//
|
|
16573
|
+
// node_modules/circle-ir/dist/resolution/cross-file.js
|
|
16488
16574
|
function buildFileIndex(ir) {
|
|
16489
16575
|
const callsByLine = new Map;
|
|
16490
16576
|
for (const c of ir.calls) {
|
|
@@ -17572,7 +17658,7 @@ class CrossFileResolver {
|
|
|
17572
17658
|
return this.fieldTaintInfo.get(`${typeFqn}.${fieldName}`);
|
|
17573
17659
|
}
|
|
17574
17660
|
}
|
|
17575
|
-
//
|
|
17661
|
+
// node_modules/circle-ir/dist/graph/project-graph.js
|
|
17576
17662
|
class ProjectGraph {
|
|
17577
17663
|
files = new Map;
|
|
17578
17664
|
_symbolTable = null;
|
|
@@ -17624,7 +17710,7 @@ class ProjectGraph {
|
|
|
17624
17710
|
return this._resolver;
|
|
17625
17711
|
}
|
|
17626
17712
|
}
|
|
17627
|
-
//
|
|
17713
|
+
// node_modules/circle-ir/dist/graph/analysis-pass.js
|
|
17628
17714
|
class AnalysisPipeline {
|
|
17629
17715
|
passes = [];
|
|
17630
17716
|
add(pass) {
|
|
@@ -17671,7 +17757,7 @@ class AnalysisPipeline {
|
|
|
17671
17757
|
return { results, findings };
|
|
17672
17758
|
}
|
|
17673
17759
|
}
|
|
17674
|
-
//
|
|
17760
|
+
// node_modules/circle-ir/dist/analysis/taint-propagation.js
|
|
17675
17761
|
function buildSanitizersByLine(sanitizers) {
|
|
17676
17762
|
const out2 = new Map;
|
|
17677
17763
|
for (const san of sanitizers) {
|
|
@@ -17970,7 +18056,7 @@ function buildTaintFlow(source, sink, taintInfo) {
|
|
|
17970
18056
|
confidence: taintInfo.confidence * 0.9
|
|
17971
18057
|
};
|
|
17972
18058
|
}
|
|
17973
|
-
//
|
|
18059
|
+
// node_modules/circle-ir/dist/analysis/constant-propagation/ast-utils.js
|
|
17974
18060
|
function isKnown(cv) {
|
|
17975
18061
|
return cv.type !== "unknown";
|
|
17976
18062
|
}
|
|
@@ -17987,7 +18073,7 @@ function getNodeLine(node) {
|
|
|
17987
18073
|
return node.startPosition.row + 1;
|
|
17988
18074
|
}
|
|
17989
18075
|
|
|
17990
|
-
//
|
|
18076
|
+
// node_modules/circle-ir/dist/analysis/constant-propagation/evaluator.js
|
|
17991
18077
|
class ExpressionEvaluator {
|
|
17992
18078
|
source;
|
|
17993
18079
|
getSymbol;
|
|
@@ -18257,7 +18343,7 @@ class ExpressionEvaluator {
|
|
|
18257
18343
|
}
|
|
18258
18344
|
}
|
|
18259
18345
|
|
|
18260
|
-
//
|
|
18346
|
+
// node_modules/circle-ir/dist/analysis/constant-propagation/patterns.js
|
|
18261
18347
|
var TAINT_PATTERNS = [
|
|
18262
18348
|
"request.getParameter",
|
|
18263
18349
|
"request.getHeader",
|
|
@@ -18452,7 +18538,7 @@ var PROPAGATOR_METHODS = new Set([
|
|
|
18452
18538
|
"decodeRequestString"
|
|
18453
18539
|
]);
|
|
18454
18540
|
|
|
18455
|
-
//
|
|
18541
|
+
// node_modules/circle-ir/dist/analysis/constant-propagation/propagator.js
|
|
18456
18542
|
class ConstantPropagator {
|
|
18457
18543
|
symbols = new Map;
|
|
18458
18544
|
tainted = new Set;
|
|
@@ -20309,7 +20395,7 @@ class ConstantPropagator {
|
|
|
20309
20395
|
}
|
|
20310
20396
|
}
|
|
20311
20397
|
|
|
20312
|
-
//
|
|
20398
|
+
// node_modules/circle-ir/dist/analysis/constant-propagation/index.js
|
|
20313
20399
|
function analyzeConstantPropagation(tree, sourceCode, options = {}) {
|
|
20314
20400
|
const propagator = new ConstantPropagator;
|
|
20315
20401
|
return propagator.analyze(tree, sourceCode, options.additionalTaintPatterns ?? [], options.sanitizerMethods ?? [], options.taintedParameters ?? []);
|
|
@@ -20397,7 +20483,7 @@ function normalizeCondition(cond) {
|
|
|
20397
20483
|
}
|
|
20398
20484
|
return normalized;
|
|
20399
20485
|
}
|
|
20400
|
-
//
|
|
20486
|
+
// node_modules/circle-ir/dist/utils/logger.js
|
|
20401
20487
|
var LOG_LEVELS = {
|
|
20402
20488
|
trace: 0,
|
|
20403
20489
|
debug: 1,
|
|
@@ -20469,7 +20555,7 @@ var logger = {
|
|
|
20469
20555
|
}
|
|
20470
20556
|
};
|
|
20471
20557
|
|
|
20472
|
-
//
|
|
20558
|
+
// node_modules/circle-ir/dist/analysis/per-file-finding-cap.js
|
|
20473
20559
|
var DEFAULT_PER_FILE_FINDING_CAP = 1000;
|
|
20474
20560
|
var SATURATED_FILE_RULE_ID = "saturated-file";
|
|
20475
20561
|
function applyPerFileFindingCap(filePath, findings, cap) {
|
|
@@ -20505,7 +20591,7 @@ function applyPerFileFindingCap(filePath, findings, cap) {
|
|
|
20505
20591
|
return [advisory];
|
|
20506
20592
|
}
|
|
20507
20593
|
|
|
20508
|
-
//
|
|
20594
|
+
// node_modules/circle-ir/dist/analysis/confidence-filter.js
|
|
20509
20595
|
function applyConfidenceFilter(findings, includeSpeculative) {
|
|
20510
20596
|
if (includeSpeculative)
|
|
20511
20597
|
return findings;
|
|
@@ -20515,7 +20601,7 @@ function isHighConfidence(finding) {
|
|
|
20515
20601
|
return finding.confidence === undefined || finding.confidence === "high";
|
|
20516
20602
|
}
|
|
20517
20603
|
|
|
20518
|
-
//
|
|
20604
|
+
// node_modules/circle-ir/dist/analysis/library-api-surface-downgrade.js
|
|
20519
20605
|
var LIBRARY_API_SURFACE_TAG = "library-api-surface:caller-responsibility";
|
|
20520
20606
|
function applyLibraryApiSurfaceDowngrade(findings) {
|
|
20521
20607
|
return findings.map((f) => {
|
|
@@ -20532,7 +20618,7 @@ function applyLibraryApiSurfaceDowngrade(findings) {
|
|
|
20532
20618
|
});
|
|
20533
20619
|
}
|
|
20534
20620
|
|
|
20535
|
-
//
|
|
20621
|
+
// node_modules/circle-ir/dist/analysis/note-coalescer.js
|
|
20536
20622
|
var CLICKJACKING_PAIR = new Set(["missing-x-frame-options", "missing-csp-frame-ancestors"]);
|
|
20537
20623
|
function levelRank(level) {
|
|
20538
20624
|
return level === "error" ? 0 : level === "warning" ? 1 : 2;
|
|
@@ -20596,7 +20682,7 @@ function coalesceNoteLevelFindings(findings) {
|
|
|
20596
20682
|
return out2;
|
|
20597
20683
|
}
|
|
20598
20684
|
|
|
20599
|
-
//
|
|
20685
|
+
// node_modules/circle-ir/dist/analysis/entry-point-detection.js
|
|
20600
20686
|
var TIER_1_METHOD_ANNOTATIONS = new Set([
|
|
20601
20687
|
"RequestMapping",
|
|
20602
20688
|
"GetMapping",
|
|
@@ -21253,7 +21339,7 @@ function methodIsRuntimeRegistrationHandler(method, regs) {
|
|
|
21253
21339
|
return false;
|
|
21254
21340
|
}
|
|
21255
21341
|
|
|
21256
|
-
//
|
|
21342
|
+
// node_modules/circle-ir/dist/analysis/require-entry-path.js
|
|
21257
21343
|
var RULE_ID_REQUIRE_ENTRY_PATH = "require-entry-path";
|
|
21258
21344
|
var MAX_VISITED_METHODS = 2000;
|
|
21259
21345
|
var TAINT_FLOW_RULE_IDS = new Set([
|
|
@@ -21642,7 +21728,7 @@ function normalizeDisabled(input) {
|
|
|
21642
21728
|
return new Set(input);
|
|
21643
21729
|
}
|
|
21644
21730
|
|
|
21645
|
-
//
|
|
21731
|
+
// node_modules/circle-ir/dist/analysis/project-profile-transform.js
|
|
21646
21732
|
var DOWNGRADE_ELIGIBLE_RULE_IDS = new Set([
|
|
21647
21733
|
"code_injection",
|
|
21648
21734
|
"template_injection",
|
|
@@ -21704,7 +21790,7 @@ function applyProjectProfileTransform(findings, resolveProfile) {
|
|
|
21704
21790
|
});
|
|
21705
21791
|
}
|
|
21706
21792
|
|
|
21707
|
-
//
|
|
21793
|
+
// node_modules/circle-ir/dist/languages/registry.js
|
|
21708
21794
|
class DefaultLanguageRegistry {
|
|
21709
21795
|
plugins = new Map;
|
|
21710
21796
|
extensionMap = new Map;
|
|
@@ -21751,7 +21837,7 @@ function registerLanguage(plugin) {
|
|
|
21751
21837
|
function getLanguagePlugin(language) {
|
|
21752
21838
|
return getLanguageRegistry().get(language);
|
|
21753
21839
|
}
|
|
21754
|
-
//
|
|
21840
|
+
// node_modules/circle-ir/dist/languages/plugins/base.js
|
|
21755
21841
|
class BaseLanguagePlugin {
|
|
21756
21842
|
parser = null;
|
|
21757
21843
|
async initialize(parser) {
|
|
@@ -21812,7 +21898,7 @@ class BaseLanguagePlugin {
|
|
|
21812
21898
|
}
|
|
21813
21899
|
}
|
|
21814
21900
|
|
|
21815
|
-
//
|
|
21901
|
+
// node_modules/circle-ir/dist/languages/plugins/java.js
|
|
21816
21902
|
class JavaPlugin extends BaseLanguagePlugin {
|
|
21817
21903
|
id = "java";
|
|
21818
21904
|
name = "Java";
|
|
@@ -22069,7 +22155,7 @@ class JavaPlugin extends BaseLanguagePlugin {
|
|
|
22069
22155
|
}
|
|
22070
22156
|
}
|
|
22071
22157
|
|
|
22072
|
-
//
|
|
22158
|
+
// node_modules/circle-ir/dist/languages/plugins/javascript.js
|
|
22073
22159
|
class JavaScriptPlugin extends BaseLanguagePlugin {
|
|
22074
22160
|
id = "javascript";
|
|
22075
22161
|
name = "JavaScript/TypeScript";
|
|
@@ -22735,7 +22821,7 @@ class JavaScriptPlugin extends BaseLanguagePlugin {
|
|
|
22735
22821
|
}
|
|
22736
22822
|
}
|
|
22737
22823
|
|
|
22738
|
-
//
|
|
22824
|
+
// node_modules/circle-ir/dist/languages/plugins/python.js
|
|
22739
22825
|
class PythonPlugin extends BaseLanguagePlugin {
|
|
22740
22826
|
id = "python";
|
|
22741
22827
|
name = "Python";
|
|
@@ -23011,7 +23097,7 @@ class PythonPlugin extends BaseLanguagePlugin {
|
|
|
23011
23097
|
}
|
|
23012
23098
|
}
|
|
23013
23099
|
|
|
23014
|
-
//
|
|
23100
|
+
// node_modules/circle-ir/dist/languages/plugins/rust.js
|
|
23015
23101
|
class RustPlugin extends BaseLanguagePlugin {
|
|
23016
23102
|
id = "rust";
|
|
23017
23103
|
name = "Rust";
|
|
@@ -23170,13 +23256,6 @@ class RustPlugin extends BaseLanguagePlugin {
|
|
|
23170
23256
|
severity: "high",
|
|
23171
23257
|
argPositions: [0]
|
|
23172
23258
|
},
|
|
23173
|
-
{
|
|
23174
|
-
method: "format!",
|
|
23175
|
-
type: "format_string",
|
|
23176
|
-
cwe: "CWE-134",
|
|
23177
|
-
severity: "medium",
|
|
23178
|
-
argPositions: [0]
|
|
23179
|
-
},
|
|
23180
23259
|
{
|
|
23181
23260
|
method: "from_raw_parts",
|
|
23182
23261
|
type: "unsafe_memory",
|
|
@@ -23251,7 +23330,7 @@ class RustPlugin extends BaseLanguagePlugin {
|
|
|
23251
23330
|
}
|
|
23252
23331
|
}
|
|
23253
23332
|
|
|
23254
|
-
//
|
|
23333
|
+
// node_modules/circle-ir/dist/languages/plugins/bash.js
|
|
23255
23334
|
class BashPlugin extends BaseLanguagePlugin {
|
|
23256
23335
|
id = "bash";
|
|
23257
23336
|
name = "Bash/Shell";
|
|
@@ -23457,7 +23536,7 @@ class BashPlugin extends BaseLanguagePlugin {
|
|
|
23457
23536
|
}
|
|
23458
23537
|
}
|
|
23459
23538
|
|
|
23460
|
-
//
|
|
23539
|
+
// node_modules/circle-ir/dist/languages/plugins/html.js
|
|
23461
23540
|
class HtmlPlugin extends BaseLanguagePlugin {
|
|
23462
23541
|
id = "html";
|
|
23463
23542
|
name = "HTML";
|
|
@@ -23522,7 +23601,7 @@ class HtmlPlugin extends BaseLanguagePlugin {
|
|
|
23522
23601
|
}
|
|
23523
23602
|
}
|
|
23524
23603
|
|
|
23525
|
-
//
|
|
23604
|
+
// node_modules/circle-ir/dist/languages/plugins/vue.js
|
|
23526
23605
|
class VuePlugin extends BaseLanguagePlugin {
|
|
23527
23606
|
id = "vue";
|
|
23528
23607
|
name = "Vue";
|
|
@@ -23587,7 +23666,7 @@ class VuePlugin extends BaseLanguagePlugin {
|
|
|
23587
23666
|
}
|
|
23588
23667
|
}
|
|
23589
23668
|
|
|
23590
|
-
//
|
|
23669
|
+
// node_modules/circle-ir/dist/languages/plugins/go.js
|
|
23591
23670
|
class GoPlugin extends BaseLanguagePlugin {
|
|
23592
23671
|
id = "go";
|
|
23593
23672
|
name = "Go";
|
|
@@ -24236,7 +24315,7 @@ class GoPlugin extends BaseLanguagePlugin {
|
|
|
24236
24315
|
}
|
|
24237
24316
|
}
|
|
24238
24317
|
|
|
24239
|
-
//
|
|
24318
|
+
// node_modules/circle-ir/dist/languages/plugins/csharp.js
|
|
24240
24319
|
class CSharpPlugin extends BaseLanguagePlugin {
|
|
24241
24320
|
id = "csharp";
|
|
24242
24321
|
name = "C#";
|
|
@@ -24295,7 +24374,7 @@ class CSharpPlugin extends BaseLanguagePlugin {
|
|
|
24295
24374
|
}
|
|
24296
24375
|
}
|
|
24297
24376
|
|
|
24298
|
-
//
|
|
24377
|
+
// node_modules/circle-ir/dist/languages/plugins/index.js
|
|
24299
24378
|
function registerBuiltinPlugins() {
|
|
24300
24379
|
registerLanguage(new JavaPlugin);
|
|
24301
24380
|
registerLanguage(new JavaScriptPlugin);
|
|
@@ -24307,7 +24386,7 @@ function registerBuiltinPlugins() {
|
|
|
24307
24386
|
registerLanguage(new GoPlugin);
|
|
24308
24387
|
registerLanguage(new CSharpPlugin);
|
|
24309
24388
|
}
|
|
24310
|
-
//
|
|
24389
|
+
// node_modules/circle-ir/dist/analysis/passes/cross-file-pass.js
|
|
24311
24390
|
class CrossFilePass {
|
|
24312
24391
|
run(projectGraph, sourceLines, options = {}) {
|
|
24313
24392
|
const resolver = projectGraph.resolver;
|
|
@@ -24633,7 +24712,7 @@ function findCrossInstanceAliasingPaths(projectGraph, _sourceLines) {
|
|
|
24633
24712
|
return paths;
|
|
24634
24713
|
}
|
|
24635
24714
|
|
|
24636
|
-
//
|
|
24715
|
+
// node_modules/circle-ir/dist/analysis/html/html-extractor.js
|
|
24637
24716
|
var EVENT_HANDLER_ATTRS = new Set([
|
|
24638
24717
|
"onclick",
|
|
24639
24718
|
"ondblclick",
|
|
@@ -24788,7 +24867,7 @@ function stripQuotes2(text) {
|
|
|
24788
24867
|
return text;
|
|
24789
24868
|
}
|
|
24790
24869
|
|
|
24791
|
-
//
|
|
24870
|
+
// node_modules/circle-ir/dist/analysis/html/html-attribute-security-pass.js
|
|
24792
24871
|
function runHtmlAttributeSecurityChecks(rootNode, filePath) {
|
|
24793
24872
|
const findings = [];
|
|
24794
24873
|
walkForSecurityChecks(rootNode, filePath, findings);
|
|
@@ -25014,7 +25093,7 @@ function truncate(s, maxLen) {
|
|
|
25014
25093
|
return s.length > maxLen ? s.slice(0, maxLen) + "..." : s;
|
|
25015
25094
|
}
|
|
25016
25095
|
|
|
25017
|
-
//
|
|
25096
|
+
// node_modules/circle-ir/dist/analysis/html/vue-template-xss-pass.js
|
|
25018
25097
|
var DANGEROUS_BINDINGS = new Set([
|
|
25019
25098
|
"v-html",
|
|
25020
25099
|
"v-bind:innerhtml",
|
|
@@ -25134,7 +25213,7 @@ function collectTaintedNames(blocks) {
|
|
|
25134
25213
|
return names;
|
|
25135
25214
|
}
|
|
25136
25215
|
|
|
25137
|
-
//
|
|
25216
|
+
// node_modules/circle-ir/dist/analysis/html/html-merge.js
|
|
25138
25217
|
function mergeHtmlResults(htmlMeta, scriptResults, attributeFindings) {
|
|
25139
25218
|
const allTypes = [];
|
|
25140
25219
|
const allCalls = [];
|
|
@@ -25284,7 +25363,7 @@ function mergeHtmlResults(htmlMeta, scriptResults, attributeFindings) {
|
|
|
25284
25363
|
};
|
|
25285
25364
|
}
|
|
25286
25365
|
|
|
25287
|
-
//
|
|
25366
|
+
// node_modules/circle-ir/dist/analysis/passes/taint-matcher-pass.js
|
|
25288
25367
|
class TaintMatcherPass {
|
|
25289
25368
|
name = "taint-matcher";
|
|
25290
25369
|
category = "security";
|
|
@@ -25345,7 +25424,7 @@ class TaintMatcherPass {
|
|
|
25345
25424
|
}
|
|
25346
25425
|
}
|
|
25347
25426
|
|
|
25348
|
-
//
|
|
25427
|
+
// node_modules/circle-ir/dist/analysis/passes/constant-propagation-pass.js
|
|
25349
25428
|
class ConstantPropagationPass {
|
|
25350
25429
|
tree;
|
|
25351
25430
|
name = "constant-propagation";
|
|
@@ -25375,7 +25454,7 @@ class ConstantPropagationPass {
|
|
|
25375
25454
|
}
|
|
25376
25455
|
}
|
|
25377
25456
|
|
|
25378
|
-
//
|
|
25457
|
+
// node_modules/circle-ir/dist/analysis/passes/language-sources-pass.js
|
|
25379
25458
|
var JS_DOM_XSS_SINKS = [
|
|
25380
25459
|
{ pattern: /\.innerHTML\s*=/, type: "xss", cwe: "CWE-79", severity: "critical" },
|
|
25381
25460
|
{ pattern: /\.outerHTML\s*=/, type: "xss", cwe: "CWE-79", severity: "critical" },
|
|
@@ -26134,12 +26213,21 @@ function findCSharpRequestSources(sourceCode, language) {
|
|
|
26134
26213
|
const requestReadRe = /\bRequest\s*\.\s*(?:Query|Form|Headers|Cookies|QueryString|RouteValues|Body|Files|Params)\b/;
|
|
26135
26214
|
const consoleReadRe = /\bConsole\s*\.\s*ReadLine\s*\(/;
|
|
26136
26215
|
const envReadRe = /\bEnvironment\s*\.\s*GetEnvironmentVariables?\s*(?:\(|\[)/;
|
|
26216
|
+
const formFileParams = new Set;
|
|
26217
|
+
const formFileDeclRe = /\bIFormFile\s+([A-Za-z_]\w*)/g;
|
|
26218
|
+
for (const line of lines) {
|
|
26219
|
+
const re = new RegExp(formFileDeclRe.source, "g");
|
|
26220
|
+
let d;
|
|
26221
|
+
while ((d = re.exec(line)) !== null)
|
|
26222
|
+
formFileParams.add(d[1]);
|
|
26223
|
+
}
|
|
26224
|
+
const formFileReadRe = formFileParams.size > 0 ? new RegExp(`\\b(?:${[...formFileParams].join("|")})\\s*\\.\\s*(?:FileName|ContentType)\\b`) : null;
|
|
26137
26225
|
for (let i2 = 0;i2 < lines.length; i2++) {
|
|
26138
26226
|
const m = assignRe.exec(lines[i2]);
|
|
26139
26227
|
if (!m)
|
|
26140
26228
|
continue;
|
|
26141
26229
|
const [, varName, rhs] = m;
|
|
26142
|
-
const type = requestReadRe.test(rhs) ? "http_param" : consoleReadRe.test(rhs) ? "io_input" : envReadRe.test(rhs) ? "env_input" : null;
|
|
26230
|
+
const type = requestReadRe.test(rhs) ? "http_param" : formFileReadRe?.test(rhs) ? "http_param" : consoleReadRe.test(rhs) ? "io_input" : envReadRe.test(rhs) ? "env_input" : null;
|
|
26143
26231
|
if (!type)
|
|
26144
26232
|
continue;
|
|
26145
26233
|
const lineNumber = i2 + 1;
|
|
@@ -32423,7 +32511,7 @@ function findJsTemplateInjectionSstiFindings(code, file) {
|
|
|
32423
32511
|
return findings;
|
|
32424
32512
|
}
|
|
32425
32513
|
|
|
32426
|
-
//
|
|
32514
|
+
// node_modules/circle-ir/dist/analysis/passes/source-semantics-pass.js
|
|
32427
32515
|
var DEMO_PATH_RE = /(?:^|\/)(?:demo|example|examples|samples|integration-tests|integration_tests)(?:\/|$)/i;
|
|
32428
32516
|
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*$/;
|
|
32429
32517
|
var STATIC_FINAL_RE = /^\s*(?:public\s+|private\s+|protected\s+)?static\s+final\s+/;
|
|
@@ -32511,7 +32599,7 @@ class SourceSemanticsPass {
|
|
|
32511
32599
|
}
|
|
32512
32600
|
}
|
|
32513
32601
|
|
|
32514
|
-
//
|
|
32602
|
+
// node_modules/circle-ir/dist/analysis/passes/library-profile-source-gate-pass.js
|
|
32515
32603
|
var SPECULATIVE_SOURCE_TYPES = new Set([
|
|
32516
32604
|
"interprocedural_param",
|
|
32517
32605
|
"constructor_field"
|
|
@@ -32566,7 +32654,7 @@ class LibraryProfileSourceGatePass {
|
|
|
32566
32654
|
}
|
|
32567
32655
|
}
|
|
32568
32656
|
|
|
32569
|
-
//
|
|
32657
|
+
// node_modules/circle-ir/dist/analysis/passes/mybatis-annotation-sql-sink-pass.js
|
|
32570
32658
|
var MYBATIS_SQL_ANNOTATIONS = new Set([
|
|
32571
32659
|
"Select",
|
|
32572
32660
|
"Update",
|
|
@@ -32793,7 +32881,7 @@ class MyBatisAnnotationSqlSinkPass {
|
|
|
32793
32881
|
}
|
|
32794
32882
|
}
|
|
32795
32883
|
|
|
32796
|
-
//
|
|
32884
|
+
// node_modules/circle-ir/dist/analysis/passes/sink-filter-pass.js
|
|
32797
32885
|
function escapeReSf(s) {
|
|
32798
32886
|
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
32799
32887
|
}
|
|
@@ -34597,7 +34685,7 @@ function isXPathQuoteEscapedOnLine(lineText, varName) {
|
|
|
34597
34685
|
return seen > 0;
|
|
34598
34686
|
}
|
|
34599
34687
|
|
|
34600
|
-
//
|
|
34688
|
+
// node_modules/circle-ir/dist/analysis/passes/sink-semantics-pass.js
|
|
34601
34689
|
function buildRegistry(entries) {
|
|
34602
34690
|
const registry = new Map;
|
|
34603
34691
|
for (const entry of entries) {
|
|
@@ -34645,7 +34733,7 @@ class SinkSemanticsPass {
|
|
|
34645
34733
|
}
|
|
34646
34734
|
}
|
|
34647
34735
|
|
|
34648
|
-
//
|
|
34736
|
+
// node_modules/circle-ir/dist/analysis/dependency-versions.js
|
|
34649
34737
|
function resolveFastjsonFromPom(pomXml) {
|
|
34650
34738
|
if (!pomXml)
|
|
34651
34739
|
return null;
|
|
@@ -34823,7 +34911,7 @@ function fileConfiguresSnakeYamlSafely(source) {
|
|
|
34823
34911
|
return false;
|
|
34824
34912
|
}
|
|
34825
34913
|
|
|
34826
|
-
//
|
|
34914
|
+
// node_modules/circle-ir/dist/analysis/passes/deserialization-safety-gate-pass.js
|
|
34827
34915
|
var FASTJSON_METHODS = new Set(["parseObject", "parse"]);
|
|
34828
34916
|
var FASTJSON_CLASSES = new Set(["JSON", "JSONObject"]);
|
|
34829
34917
|
var JACKSON_METHODS = new Set(["readValue", "convertValue", "treeToValue"]);
|
|
@@ -34900,7 +34988,7 @@ class DeserializationSafetyGatePass {
|
|
|
34900
34988
|
}
|
|
34901
34989
|
}
|
|
34902
34990
|
|
|
34903
|
-
//
|
|
34991
|
+
// node_modules/circle-ir/dist/analysis/passes/prompt-injection-safety-gate-pass.js
|
|
34904
34992
|
function isDelimiterLiteral(lit) {
|
|
34905
34993
|
const s = lit.trim();
|
|
34906
34994
|
if (s.length === 0)
|
|
@@ -35143,7 +35231,7 @@ class PromptInjectionSafetyGatePass {
|
|
|
35143
35231
|
}
|
|
35144
35232
|
}
|
|
35145
35233
|
|
|
35146
|
-
//
|
|
35234
|
+
// node_modules/circle-ir/dist/analysis/passes/speculative-prompt-param-source-pass.js
|
|
35147
35235
|
function returnOrAssignRhs(text) {
|
|
35148
35236
|
const t = text.trim();
|
|
35149
35237
|
const ret = t.match(/^return\s+(.+?);?$/);
|
|
@@ -35269,7 +35357,7 @@ class SpeculativePromptParamSourcePass {
|
|
|
35269
35357
|
}
|
|
35270
35358
|
}
|
|
35271
35359
|
|
|
35272
|
-
//
|
|
35360
|
+
// node_modules/circle-ir/dist/analysis/passes/cli-main-reflection-suppress-pass.js
|
|
35273
35361
|
var REFLECTION_SINK_METHODS = new Set([
|
|
35274
35362
|
"forName",
|
|
35275
35363
|
"newInstance",
|
|
@@ -35457,7 +35545,7 @@ class CliMainReflectionSuppressPass {
|
|
|
35457
35545
|
}
|
|
35458
35546
|
}
|
|
35459
35547
|
|
|
35460
|
-
//
|
|
35548
|
+
// node_modules/circle-ir/dist/analysis/passes/library-profile-sink-gate-pass.js
|
|
35461
35549
|
var DROPPED_SINK_TYPES = new Set([
|
|
35462
35550
|
"log_injection"
|
|
35463
35551
|
]);
|
|
@@ -35563,7 +35651,7 @@ class LibraryProfileCwe22PathGatePass {
|
|
|
35563
35651
|
}
|
|
35564
35652
|
}
|
|
35565
35653
|
|
|
35566
|
-
//
|
|
35654
|
+
// node_modules/circle-ir/dist/analysis/passes/library-profile-xss-gate-pass.js
|
|
35567
35655
|
var XSS_NON_HTML_OUTPUT_CLASSES = new Set([
|
|
35568
35656
|
"StringBuilder",
|
|
35569
35657
|
"StringBuffer",
|
|
@@ -35644,7 +35732,7 @@ class LibraryProfileXssGatePass {
|
|
|
35644
35732
|
}
|
|
35645
35733
|
}
|
|
35646
35734
|
|
|
35647
|
-
//
|
|
35735
|
+
// node_modules/circle-ir/dist/analysis/passes/taint-propagation-pass.js
|
|
35648
35736
|
class TaintPropagationPass {
|
|
35649
35737
|
name = "taint-propagation";
|
|
35650
35738
|
category = "security";
|
|
@@ -36874,7 +36962,7 @@ function pickScopedSource(sources, sinkLine, methodName, types, taintedVar) {
|
|
|
36874
36962
|
return sources[0];
|
|
36875
36963
|
}
|
|
36876
36964
|
|
|
36877
|
-
//
|
|
36965
|
+
// node_modules/circle-ir/dist/analysis/interprocedural.js
|
|
36878
36966
|
function analyzeInterprocedural2(graphOrTypes, callsOrSources, dfgOrSinks, sourcesOrSanitizers, sinksOrOptions, sanitizersArg, optionsArg = {}) {
|
|
36879
36967
|
let graph;
|
|
36880
36968
|
let sources;
|
|
@@ -37388,7 +37476,7 @@ function findTaintBridges2(result) {
|
|
|
37388
37476
|
return bridges;
|
|
37389
37477
|
}
|
|
37390
37478
|
|
|
37391
|
-
//
|
|
37479
|
+
// node_modules/circle-ir/dist/analysis/passes/interprocedural-pass.js
|
|
37392
37480
|
class InterproceduralPass {
|
|
37393
37481
|
name = "interprocedural";
|
|
37394
37482
|
category = "security";
|
|
@@ -37594,7 +37682,7 @@ class InterproceduralPass {
|
|
|
37594
37682
|
}
|
|
37595
37683
|
}
|
|
37596
37684
|
|
|
37597
|
-
//
|
|
37685
|
+
// node_modules/circle-ir/dist/analysis/passes/dead-code-pass.js
|
|
37598
37686
|
class DeadCodePass {
|
|
37599
37687
|
name = "dead-code";
|
|
37600
37688
|
category = "reliability";
|
|
@@ -37670,7 +37758,7 @@ class DeadCodePass {
|
|
|
37670
37758
|
}
|
|
37671
37759
|
}
|
|
37672
37760
|
|
|
37673
|
-
//
|
|
37761
|
+
// node_modules/circle-ir/dist/analysis/passes/missing-await-pass.js
|
|
37674
37762
|
var ASYNC_METHODS = new Set([
|
|
37675
37763
|
"readFile",
|
|
37676
37764
|
"writeFile",
|
|
@@ -37749,7 +37837,7 @@ class MissingAwaitPass {
|
|
|
37749
37837
|
}
|
|
37750
37838
|
}
|
|
37751
37839
|
|
|
37752
|
-
//
|
|
37840
|
+
// node_modules/circle-ir/dist/analysis/passes/n-plus-one-pass.js
|
|
37753
37841
|
var HIGH_CONFIDENCE_DB_METHODS = new Set([
|
|
37754
37842
|
"executeQuery",
|
|
37755
37843
|
"executeUpdate",
|
|
@@ -37872,7 +37960,7 @@ class NPlusOnePass {
|
|
|
37872
37960
|
}
|
|
37873
37961
|
}
|
|
37874
37962
|
|
|
37875
|
-
//
|
|
37963
|
+
// node_modules/circle-ir/dist/analysis/passes/missing-public-doc-pass.js
|
|
37876
37964
|
var TEST_PATH_RE = /[/._](test|tests|spec|specs|__tests?__|__mocks?__)[/._]/i;
|
|
37877
37965
|
var UTIL_DIR_RE = /[/](utils?|helpers?|internal|private|common|shared)[/]/i;
|
|
37878
37966
|
function hasDocCommentBefore(lines, startLine) {
|
|
@@ -37979,7 +38067,7 @@ class MissingPublicDocPass {
|
|
|
37979
38067
|
}
|
|
37980
38068
|
}
|
|
37981
38069
|
|
|
37982
|
-
//
|
|
38070
|
+
// node_modules/circle-ir/dist/analysis/passes/todo-in-prod-pass.js
|
|
37983
38071
|
var TEST_PATH_RE2 = /[/._](test|tests|spec|specs|__tests?__|__mocks?__)[/._]/i;
|
|
37984
38072
|
var MARKER_RE = /(?:\/\/|#|--|^\s*\*)\s*(TODO|FIXME|HACK|XXX)\b/i;
|
|
37985
38073
|
function markerSeverity(marker) {
|
|
@@ -38025,7 +38113,7 @@ class TodoInProdPass {
|
|
|
38025
38113
|
}
|
|
38026
38114
|
}
|
|
38027
38115
|
|
|
38028
|
-
//
|
|
38116
|
+
// node_modules/circle-ir/dist/analysis/passes/string-concat-loop-pass.js
|
|
38029
38117
|
var CONCAT_RE = /\b([a-zA-Z_$][a-zA-Z0-9_$]*)\s*\+=/;
|
|
38030
38118
|
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;
|
|
38031
38119
|
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)$/;
|
|
@@ -38088,7 +38176,7 @@ class StringConcatLoopPass {
|
|
|
38088
38176
|
}
|
|
38089
38177
|
}
|
|
38090
38178
|
|
|
38091
|
-
//
|
|
38179
|
+
// node_modules/circle-ir/dist/analysis/passes/sync-io-async-pass.js
|
|
38092
38180
|
var BLOCKING_METHODS = new Set([
|
|
38093
38181
|
"sleep"
|
|
38094
38182
|
]);
|
|
@@ -38149,7 +38237,7 @@ class SyncIoAsyncPass {
|
|
|
38149
38237
|
}
|
|
38150
38238
|
}
|
|
38151
38239
|
|
|
38152
|
-
//
|
|
38240
|
+
// node_modules/circle-ir/dist/analysis/passes/unchecked-return-pass.js
|
|
38153
38241
|
var MUST_CHECK_HIGH = new Set([
|
|
38154
38242
|
"createNewFile",
|
|
38155
38243
|
"mkdir",
|
|
@@ -38222,7 +38310,7 @@ class UncheckedReturnPass {
|
|
|
38222
38310
|
}
|
|
38223
38311
|
}
|
|
38224
38312
|
|
|
38225
|
-
//
|
|
38313
|
+
// node_modules/circle-ir/dist/analysis/passes/null-deref-pass.js
|
|
38226
38314
|
var NULL_EXPR_RE = /^\s*(null|None|undefined)\s*$/;
|
|
38227
38315
|
function escRe(s) {
|
|
38228
38316
|
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
@@ -38304,7 +38392,7 @@ class NullDerefPass {
|
|
|
38304
38392
|
}
|
|
38305
38393
|
}
|
|
38306
38394
|
|
|
38307
|
-
//
|
|
38395
|
+
// node_modules/circle-ir/dist/analysis/passes/resource-leak-pass.js
|
|
38308
38396
|
function escapeRegex2(s) {
|
|
38309
38397
|
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
38310
38398
|
}
|
|
@@ -38581,7 +38669,7 @@ class ResourceLeakPass {
|
|
|
38581
38669
|
}
|
|
38582
38670
|
}
|
|
38583
38671
|
|
|
38584
|
-
//
|
|
38672
|
+
// node_modules/circle-ir/dist/graph/scope-graph.js
|
|
38585
38673
|
function hasDeclKeyword(lineText, language) {
|
|
38586
38674
|
switch (language) {
|
|
38587
38675
|
case "java":
|
|
@@ -38621,7 +38709,7 @@ class ScopeGraph {
|
|
|
38621
38709
|
}
|
|
38622
38710
|
}
|
|
38623
38711
|
|
|
38624
|
-
//
|
|
38712
|
+
// node_modules/circle-ir/dist/analysis/passes/variable-shadowing-pass.js
|
|
38625
38713
|
var SKIP_NAMES = new Set([
|
|
38626
38714
|
"let",
|
|
38627
38715
|
"const",
|
|
@@ -38779,7 +38867,7 @@ class VariableShadowingPass {
|
|
|
38779
38867
|
}
|
|
38780
38868
|
}
|
|
38781
38869
|
|
|
38782
|
-
//
|
|
38870
|
+
// node_modules/circle-ir/dist/analysis/passes/leaked-global-pass.js
|
|
38783
38871
|
var SKIP_NAMES2 = new Set([
|
|
38784
38872
|
"_",
|
|
38785
38873
|
"e",
|
|
@@ -38866,7 +38954,7 @@ class LeakedGlobalPass {
|
|
|
38866
38954
|
}
|
|
38867
38955
|
}
|
|
38868
38956
|
|
|
38869
|
-
//
|
|
38957
|
+
// node_modules/circle-ir/dist/analysis/passes/unused-variable-pass.js
|
|
38870
38958
|
var SKIP_NAMES3 = new Set([
|
|
38871
38959
|
"_",
|
|
38872
38960
|
"unused",
|
|
@@ -39011,7 +39099,7 @@ class UnusedVariablePass {
|
|
|
39011
39099
|
}
|
|
39012
39100
|
}
|
|
39013
39101
|
|
|
39014
|
-
//
|
|
39102
|
+
// node_modules/circle-ir/dist/analysis/passes/dependency-fan-out-pass.js
|
|
39015
39103
|
var DEFAULT_THRESHOLD = 20;
|
|
39016
39104
|
|
|
39017
39105
|
class DependencyFanOutPass {
|
|
@@ -39043,7 +39131,7 @@ class DependencyFanOutPass {
|
|
|
39043
39131
|
}
|
|
39044
39132
|
}
|
|
39045
39133
|
|
|
39046
|
-
//
|
|
39134
|
+
// node_modules/circle-ir/dist/analysis/passes/stale-doc-ref-pass.js
|
|
39047
39135
|
var DOC_BLOCK_RE = /\/\*\*([\s\S]*?)\*\//g;
|
|
39048
39136
|
var LINK_RE = /\{@link\s+([\w.#]+)/g;
|
|
39049
39137
|
var SEE_RE = /@see\s+([\w.#]+)/g;
|
|
@@ -39122,7 +39210,7 @@ class StaleDocRefPass {
|
|
|
39122
39210
|
}
|
|
39123
39211
|
}
|
|
39124
39212
|
|
|
39125
|
-
//
|
|
39213
|
+
// node_modules/circle-ir/dist/analysis/passes/infinite-loop-pass.js
|
|
39126
39214
|
var EXIT_KEYWORDS = /\b(return|throw|raise|break|System\.exit|process\.exit|os\._exit|exit!\()\b/;
|
|
39127
39215
|
var ITERATOR_LOOP_PATTERNS = [
|
|
39128
39216
|
/\bfor\s*\([^)]*\s+of\s+/,
|
|
@@ -39241,7 +39329,7 @@ class InfiniteLoopPass {
|
|
|
39241
39329
|
}
|
|
39242
39330
|
}
|
|
39243
39331
|
|
|
39244
|
-
//
|
|
39332
|
+
// node_modules/circle-ir/dist/analysis/passes/deep-inheritance-pass.js
|
|
39245
39333
|
var DEPTH_THRESHOLD = 5;
|
|
39246
39334
|
var CYCLE_GUARD = 20;
|
|
39247
39335
|
|
|
@@ -39304,7 +39392,7 @@ class DeepInheritancePass {
|
|
|
39304
39392
|
}
|
|
39305
39393
|
}
|
|
39306
39394
|
|
|
39307
|
-
//
|
|
39395
|
+
// node_modules/circle-ir/dist/analysis/passes/redundant-loop-pass.js
|
|
39308
39396
|
var LENGTH_PATTERN = /\b([A-Za-z_$][A-Za-z0-9_$]*)\s*\.\s*(?:length|size\(\)|count\(\))/g;
|
|
39309
39397
|
var LENGTH_PATTERN_METHODS = /\b([A-Za-z_$][A-Za-z0-9_$]*)\s*\.\s*(?:size\(\)|count\(\))/g;
|
|
39310
39398
|
var OBJECT_STATIC_PATTERN = /\bObject\s*\.\s*(?:keys|values|entries)\s*\(\s*([A-Za-z_$][A-Za-z0-9_$]*)\s*\)/g;
|
|
@@ -39427,7 +39515,7 @@ class RedundantLoopPass {
|
|
|
39427
39515
|
}
|
|
39428
39516
|
}
|
|
39429
39517
|
|
|
39430
|
-
//
|
|
39518
|
+
// node_modules/circle-ir/dist/analysis/passes/unbounded-collection-pass.js
|
|
39431
39519
|
var GROW_METHODS = {
|
|
39432
39520
|
java: new Set(["add", "put", "offer", "push", "addAll", "addFirst", "addLast", "enqueue", "insert"]),
|
|
39433
39521
|
javascript: new Set(["push", "set", "add", "unshift", "append", "prepend"]),
|
|
@@ -39551,7 +39639,7 @@ class UnboundedCollectionPass {
|
|
|
39551
39639
|
}
|
|
39552
39640
|
}
|
|
39553
39641
|
|
|
39554
|
-
//
|
|
39642
|
+
// node_modules/circle-ir/dist/analysis/passes/serial-await-pass.js
|
|
39555
39643
|
var AWAIT_ASSIGN_RE = /(?:const|let|var)?\s*(\w+)\s*=\s*await\s/;
|
|
39556
39644
|
var AWAIT_RE = /\bawait\s/;
|
|
39557
39645
|
|
|
@@ -39647,7 +39735,7 @@ class SerialAwaitPass {
|
|
|
39647
39735
|
}
|
|
39648
39736
|
}
|
|
39649
39737
|
|
|
39650
|
-
//
|
|
39738
|
+
// node_modules/circle-ir/dist/analysis/passes/react-inline-jsx-pass.js
|
|
39651
39739
|
var JSX_COMPONENT_RE = /<[A-Z][A-Za-z0-9]*/;
|
|
39652
39740
|
var INLINE_OBJECT_RE = /\s([A-Za-z][A-Za-z0-9_]*)=\{\{/g;
|
|
39653
39741
|
var INLINE_ARROW_RE = /\s([A-Za-z][A-Za-z0-9_]*)=\{(?:\(|[A-Za-z_$]).*?=>/g;
|
|
@@ -39751,7 +39839,7 @@ class ReactInlineJsxPass {
|
|
|
39751
39839
|
}
|
|
39752
39840
|
}
|
|
39753
39841
|
|
|
39754
|
-
//
|
|
39842
|
+
// node_modules/circle-ir/dist/graph/exception-flow-graph.js
|
|
39755
39843
|
class ExceptionFlowGraph2 {
|
|
39756
39844
|
pairs;
|
|
39757
39845
|
catchEntryIds;
|
|
@@ -39802,7 +39890,7 @@ class ExceptionFlowGraph2 {
|
|
|
39802
39890
|
}
|
|
39803
39891
|
}
|
|
39804
39892
|
|
|
39805
|
-
//
|
|
39893
|
+
// node_modules/circle-ir/dist/analysis/passes/swallowed-exception-pass.js
|
|
39806
39894
|
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/;
|
|
39807
39895
|
|
|
39808
39896
|
class SwallowedExceptionPass {
|
|
@@ -39900,7 +39988,7 @@ class SwallowedExceptionPass {
|
|
|
39900
39988
|
}
|
|
39901
39989
|
}
|
|
39902
39990
|
|
|
39903
|
-
//
|
|
39991
|
+
// node_modules/circle-ir/dist/analysis/passes/broad-catch-pass.js
|
|
39904
39992
|
var JAVA_BROAD_RE = /catch\s*\(\s*(Exception|Throwable|RuntimeException|Error)\s/;
|
|
39905
39993
|
var PYTHON_BROAD_RE = /^\s*except\s*:|except\s+(Exception|BaseException)\b/;
|
|
39906
39994
|
|
|
@@ -39956,7 +40044,7 @@ class BroadCatchPass {
|
|
|
39956
40044
|
}
|
|
39957
40045
|
}
|
|
39958
40046
|
|
|
39959
|
-
//
|
|
40047
|
+
// node_modules/circle-ir/dist/analysis/passes/unhandled-exception-pass.js
|
|
39960
40048
|
var JS_THROW_RE = /^\s*throw\s+/;
|
|
39961
40049
|
var PYTHON_RAISE_RE = /^\s*raise\b/;
|
|
39962
40050
|
function isValidationThrow(lines, throwLine) {
|
|
@@ -40126,7 +40214,7 @@ class UnhandledExceptionPass {
|
|
|
40126
40214
|
}
|
|
40127
40215
|
}
|
|
40128
40216
|
|
|
40129
|
-
//
|
|
40217
|
+
// node_modules/circle-ir/dist/analysis/passes/double-close-pass.js
|
|
40130
40218
|
var RESOURCE_CTORS2 = new Set([
|
|
40131
40219
|
"FileInputStream",
|
|
40132
40220
|
"FileOutputStream",
|
|
@@ -40241,7 +40329,7 @@ class DoubleClosePass {
|
|
|
40241
40329
|
}
|
|
40242
40330
|
}
|
|
40243
40331
|
|
|
40244
|
-
//
|
|
40332
|
+
// node_modules/circle-ir/dist/analysis/passes/use-after-close-pass.js
|
|
40245
40333
|
var RESOURCE_CTORS3 = new Set([
|
|
40246
40334
|
"FileInputStream",
|
|
40247
40335
|
"FileOutputStream",
|
|
@@ -40349,7 +40437,7 @@ class UseAfterClosePass {
|
|
|
40349
40437
|
}
|
|
40350
40438
|
}
|
|
40351
40439
|
|
|
40352
|
-
//
|
|
40440
|
+
// node_modules/circle-ir/dist/graph/dominator-graph.js
|
|
40353
40441
|
function computeRPO(cfg, entryId) {
|
|
40354
40442
|
const outgoing = new Map;
|
|
40355
40443
|
for (const edge of cfg.edges) {
|
|
@@ -40514,7 +40602,7 @@ class DominatorGraph2 {
|
|
|
40514
40602
|
}
|
|
40515
40603
|
}
|
|
40516
40604
|
|
|
40517
|
-
//
|
|
40605
|
+
// node_modules/circle-ir/dist/analysis/passes/cleanup-verify-pass.js
|
|
40518
40606
|
var RESOURCE_CTORS4 = new Set([
|
|
40519
40607
|
"FileInputStream",
|
|
40520
40608
|
"FileOutputStream",
|
|
@@ -40639,7 +40727,7 @@ class CleanupVerifyPass {
|
|
|
40639
40727
|
}
|
|
40640
40728
|
}
|
|
40641
40729
|
|
|
40642
|
-
//
|
|
40730
|
+
// node_modules/circle-ir/dist/analysis/passes/missing-override-pass.js
|
|
40643
40731
|
class MissingOverridePass {
|
|
40644
40732
|
name = "missing-override";
|
|
40645
40733
|
category = "maintainability";
|
|
@@ -40726,7 +40814,7 @@ class MissingOverridePass {
|
|
|
40726
40814
|
}
|
|
40727
40815
|
}
|
|
40728
40816
|
|
|
40729
|
-
//
|
|
40817
|
+
// node_modules/circle-ir/dist/analysis/passes/unused-interface-method-pass.js
|
|
40730
40818
|
class UnusedInterfaceMethodPass {
|
|
40731
40819
|
name = "unused-interface-method";
|
|
40732
40820
|
category = "maintainability";
|
|
@@ -40769,7 +40857,7 @@ class UnusedInterfaceMethodPass {
|
|
|
40769
40857
|
}
|
|
40770
40858
|
}
|
|
40771
40859
|
|
|
40772
|
-
//
|
|
40860
|
+
// node_modules/circle-ir/dist/analysis/passes/blocking-main-thread-pass.js
|
|
40773
40861
|
var HTTP_DECORATORS = new Set([
|
|
40774
40862
|
"Get",
|
|
40775
40863
|
"Post",
|
|
@@ -40872,7 +40960,7 @@ class BlockingMainThreadPass {
|
|
|
40872
40960
|
}
|
|
40873
40961
|
}
|
|
40874
40962
|
|
|
40875
|
-
//
|
|
40963
|
+
// node_modules/circle-ir/dist/analysis/passes/excessive-allocation-pass.js
|
|
40876
40964
|
var ALLOC_PATTERNS = {
|
|
40877
40965
|
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*\(/,
|
|
40878
40966
|
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*\(/,
|
|
@@ -40939,7 +41027,7 @@ class ExcessiveAllocationPass {
|
|
|
40939
41027
|
}
|
|
40940
41028
|
}
|
|
40941
41029
|
|
|
40942
|
-
//
|
|
41030
|
+
// node_modules/circle-ir/dist/analysis/passes/missing-stream-pass.js
|
|
40943
41031
|
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*\(/;
|
|
40944
41032
|
var JS_STREAM_RE = /\.pipe\s*\(|\.on\s*\(\s*['"]data['"]|for\s+await\s*\(|\bcreateReadStream\b|\bstream\b/i;
|
|
40945
41033
|
var JAVA_WHOLE_READ_RE = /\bFiles\.readAllBytes\s*\(|\bFiles\.readAllLines\s*\(|\bFiles\.readString\s*\(|\bnew\s+BufferedReader\s*\(|\bFileInputStream\b/;
|
|
@@ -41086,7 +41174,7 @@ class MissingStreamPass {
|
|
|
41086
41174
|
}
|
|
41087
41175
|
}
|
|
41088
41176
|
|
|
41089
|
-
//
|
|
41177
|
+
// node_modules/circle-ir/dist/analysis/passes/god-class-pass.js
|
|
41090
41178
|
var WMC_THRESHOLD = 47;
|
|
41091
41179
|
var LCOM2_THRESHOLD = 0.8;
|
|
41092
41180
|
var CBO_THRESHOLD = 14;
|
|
@@ -41252,7 +41340,7 @@ class GodClassPass {
|
|
|
41252
41340
|
}
|
|
41253
41341
|
}
|
|
41254
41342
|
|
|
41255
|
-
//
|
|
41343
|
+
// node_modules/circle-ir/dist/analysis/passes/naming-convention-pass.js
|
|
41256
41344
|
var PASCAL_CASE_RE = /^[A-Z][A-Za-z0-9]*$/;
|
|
41257
41345
|
var CAMEL_CASE_RE = /^[a-z][a-zA-Z0-9]*$/;
|
|
41258
41346
|
var SNAKE_CASE_RE = /^[a-z_][a-z0-9_]*$/;
|
|
@@ -41392,7 +41480,7 @@ class NamingConventionPass {
|
|
|
41392
41480
|
}
|
|
41393
41481
|
}
|
|
41394
41482
|
|
|
41395
|
-
//
|
|
41483
|
+
// node_modules/circle-ir/dist/analysis/passes/security-headers-pass.js
|
|
41396
41484
|
var HEADER_WRITE_METHODS = new Set([
|
|
41397
41485
|
"setHeader",
|
|
41398
41486
|
"addHeader",
|
|
@@ -41853,7 +41941,7 @@ function mapReturnValueToCorsRule(returnValue) {
|
|
|
41853
41941
|
};
|
|
41854
41942
|
}
|
|
41855
41943
|
|
|
41856
|
-
//
|
|
41944
|
+
// node_modules/circle-ir/dist/analysis/passes/_fp-allowlists.js
|
|
41857
41945
|
var PEM_BODY_RE = /[A-Za-z0-9+/]{30,}/;
|
|
41858
41946
|
function pemHasInlineBody(lines, hitLineIdx) {
|
|
41859
41947
|
const end = Math.min(hitLineIdx + 5, lines.length);
|
|
@@ -41880,7 +41968,7 @@ function isProtocolMandatedCryptoFile(file, code) {
|
|
|
41880
41968
|
return false;
|
|
41881
41969
|
}
|
|
41882
41970
|
|
|
41883
|
-
//
|
|
41971
|
+
// node_modules/circle-ir/dist/analysis/passes/scan-secrets-pass.js
|
|
41884
41972
|
function applyDemoDowngrade(demoPath, severity, level) {
|
|
41885
41973
|
if (!demoPath)
|
|
41886
41974
|
return { severity, level };
|
|
@@ -42458,7 +42546,7 @@ class ScanSecretsPass {
|
|
|
42458
42546
|
}
|
|
42459
42547
|
}
|
|
42460
42548
|
|
|
42461
|
-
//
|
|
42549
|
+
// node_modules/circle-ir/dist/analysis/passes/python-receiver-taint-format-pass.js
|
|
42462
42550
|
class PythonReceiverTaintFormatPass {
|
|
42463
42551
|
name = "python-receiver-taint-format";
|
|
42464
42552
|
category = "security";
|
|
@@ -42510,7 +42598,7 @@ class PythonReceiverTaintFormatPass {
|
|
|
42510
42598
|
}
|
|
42511
42599
|
}
|
|
42512
42600
|
|
|
42513
|
-
//
|
|
42601
|
+
// node_modules/circle-ir/dist/analysis/passes/spring4shell-pass.js
|
|
42514
42602
|
var CONTROLLER_ANNOTATIONS = new Set([
|
|
42515
42603
|
"Controller",
|
|
42516
42604
|
"RestController",
|
|
@@ -42718,7 +42806,7 @@ function isPotentialPojo(type) {
|
|
|
42718
42806
|
return first >= 65 && first <= 90;
|
|
42719
42807
|
}
|
|
42720
42808
|
|
|
42721
|
-
//
|
|
42809
|
+
// node_modules/circle-ir/dist/analysis/passes/insecure-cookie-pass.js
|
|
42722
42810
|
var COOKIE_RESPONSE_RECEIVERS = new Set([
|
|
42723
42811
|
"res",
|
|
42724
42812
|
"response",
|
|
@@ -42954,7 +43042,7 @@ class InsecureCookiePass {
|
|
|
42954
43042
|
}
|
|
42955
43043
|
}
|
|
42956
43044
|
|
|
42957
|
-
//
|
|
43045
|
+
// node_modules/circle-ir/dist/analysis/passes/weak-hash-pass.js
|
|
42958
43046
|
var WEAK_HASH_NAMES = new Set([
|
|
42959
43047
|
"md2",
|
|
42960
43048
|
"md4",
|
|
@@ -43174,7 +43262,7 @@ class WeakHashPass {
|
|
|
43174
43262
|
}
|
|
43175
43263
|
}
|
|
43176
43264
|
|
|
43177
|
-
//
|
|
43265
|
+
// node_modules/circle-ir/dist/analysis/path-classification.js
|
|
43178
43266
|
var TEST_PATH_PATTERNS = [
|
|
43179
43267
|
/(^|\/)test\//i,
|
|
43180
43268
|
/(^|\/)tests\//i,
|
|
@@ -43211,7 +43299,7 @@ function isTestPath(filepath) {
|
|
|
43211
43299
|
return false;
|
|
43212
43300
|
}
|
|
43213
43301
|
|
|
43214
|
-
//
|
|
43302
|
+
// node_modules/circle-ir/dist/analysis/passes/weak-crypto-pass.js
|
|
43215
43303
|
var WEAK_CIPHER_BASES = new Set([
|
|
43216
43304
|
"des",
|
|
43217
43305
|
"3des",
|
|
@@ -43716,7 +43804,7 @@ class WeakCryptoPass {
|
|
|
43716
43804
|
}
|
|
43717
43805
|
}
|
|
43718
43806
|
|
|
43719
|
-
//
|
|
43807
|
+
// node_modules/circle-ir/dist/analysis/passes/weak-random-pass.js
|
|
43720
43808
|
var JAVA_RANDOM_METHODS = new Set([
|
|
43721
43809
|
"nextInt",
|
|
43722
43810
|
"nextLong",
|
|
@@ -43889,7 +43977,7 @@ class WeakRandomPass {
|
|
|
43889
43977
|
}
|
|
43890
43978
|
}
|
|
43891
43979
|
|
|
43892
|
-
//
|
|
43980
|
+
// node_modules/circle-ir/dist/analysis/passes/_credential-helpers.js
|
|
43893
43981
|
var CRED_KEYWORD_RE2 = /(?:password|passwd|pwd|secret|api[_-]?key|auth[_-]?token|private[_-]?key|access[_-]?key|credential)/i;
|
|
43894
43982
|
function isCredentialIdentifier(name2) {
|
|
43895
43983
|
if (!name2)
|
|
@@ -43982,7 +44070,7 @@ function priorHashOf(varName, priorCalls) {
|
|
|
43982
44070
|
return false;
|
|
43983
44071
|
}
|
|
43984
44072
|
|
|
43985
|
-
//
|
|
44073
|
+
// node_modules/circle-ir/dist/analysis/passes/weak-password-hash-pass.js
|
|
43986
44074
|
var FAST_HASH_NAMES = new Set([
|
|
43987
44075
|
"sha224",
|
|
43988
44076
|
"sha-224",
|
|
@@ -44141,7 +44229,7 @@ class WeakPasswordHashPass {
|
|
|
44141
44229
|
}
|
|
44142
44230
|
}
|
|
44143
44231
|
|
|
44144
|
-
//
|
|
44232
|
+
// node_modules/circle-ir/dist/analysis/passes/weak-password-encoding-pass.js
|
|
44145
44233
|
function isBasicAuthContext(call, code) {
|
|
44146
44234
|
const line = call.location.line;
|
|
44147
44235
|
if (line < 1)
|
|
@@ -44253,7 +44341,7 @@ class WeakPasswordEncodingPass {
|
|
|
44253
44341
|
}
|
|
44254
44342
|
}
|
|
44255
44343
|
|
|
44256
|
-
//
|
|
44344
|
+
// node_modules/circle-ir/dist/analysis/passes/info-disclosure-stacktrace-pass.js
|
|
44257
44345
|
var RESPONSE_RECEIVER_RE = /^(res|response|w|writer|ctx|c)$/i;
|
|
44258
44346
|
var LOGGER_RECEIVER_RE = /^(log|logger|slog|console|pino|winston|sentry)$/i;
|
|
44259
44347
|
var RESPONSE_SEND_METHODS = new Set([
|
|
@@ -44439,7 +44527,7 @@ class InfoDisclosureStacktracePass {
|
|
|
44439
44527
|
}
|
|
44440
44528
|
}
|
|
44441
44529
|
|
|
44442
|
-
//
|
|
44530
|
+
// node_modules/circle-ir/dist/analysis/passes/unrestricted-file-upload-pass.js
|
|
44443
44531
|
var UPLOAD_NAME_RE = /(?:getOriginalFilename|getSubmittedFileName|originalname|originalName|\.filename|\.Filename|FileHeader\.Filename|UploadFile)/;
|
|
44444
44532
|
var FILE_SAFE_CALL_RE = /(?:secure_filename|FilenameUtils\.getExtension|\.lastIndexOf\(['"]\.['"]\)|ALLOWED_EXT|ALLOWED_EXTENSIONS|allowedExtensions|\bfileFilter\b|filepath\.Ext|path\.extname)/;
|
|
44445
44533
|
function lineWindow(lines, startLine, endLine) {
|
|
@@ -44590,7 +44678,7 @@ class UnrestrictedFileUploadPass {
|
|
|
44590
44678
|
}
|
|
44591
44679
|
}
|
|
44592
44680
|
|
|
44593
|
-
//
|
|
44681
|
+
// node_modules/circle-ir/dist/analysis/passes/missing-sanitizer-gate-pass.js
|
|
44594
44682
|
var HTML_OUTPUT_SINKS = new Set([
|
|
44595
44683
|
"addAttribute",
|
|
44596
44684
|
"setAttribute",
|
|
@@ -44738,7 +44826,7 @@ function methodAcceptsHtmlShapedParam(method) {
|
|
|
44738
44826
|
return false;
|
|
44739
44827
|
}
|
|
44740
44828
|
|
|
44741
|
-
//
|
|
44829
|
+
// node_modules/circle-ir/dist/analysis/passes/insecure-deserialization-config-pass.js
|
|
44742
44830
|
var ANY_TYPE_PERMISSION_RE = /\bAnyTypePermission\b/;
|
|
44743
44831
|
|
|
44744
44832
|
class InsecureDeserializationConfigPass {
|
|
@@ -44816,7 +44904,7 @@ class InsecureDeserializationConfigPass {
|
|
|
44816
44904
|
}
|
|
44817
44905
|
var INSECURE_TYPE_NAME_HANDLING_RE = /\bTypeNameHandling\s*=\s*(?:Newtonsoft\.Json\.)?TypeNameHandling\.(All|Auto|Objects|Arrays)\b/;
|
|
44818
44906
|
|
|
44819
|
-
//
|
|
44907
|
+
// node_modules/circle-ir/dist/analysis/passes/plaintext-password-storage-pass.js
|
|
44820
44908
|
function isWriteStorageCall(call, language) {
|
|
44821
44909
|
const method = call.method_name ?? "";
|
|
44822
44910
|
const receiver = call.receiver ?? "";
|
|
@@ -44927,7 +45015,7 @@ class PlaintextPasswordStoragePass {
|
|
|
44927
45015
|
}
|
|
44928
45016
|
}
|
|
44929
45017
|
|
|
44930
|
-
//
|
|
45018
|
+
// node_modules/circle-ir/dist/analysis/passes/cleartext-credential-transport-pass.js
|
|
44931
45019
|
var LOCALHOST_RE = /^(?:localhost|127\.0\.0\.1|0\.0\.0\.0)(?::\d+)?$/i;
|
|
44932
45020
|
function isInsecureHttpUrl(urlLiteral) {
|
|
44933
45021
|
if (!urlLiteral)
|
|
@@ -45055,7 +45143,7 @@ class CleartextCredentialTransportPass {
|
|
|
45055
45143
|
}
|
|
45056
45144
|
}
|
|
45057
45145
|
|
|
45058
|
-
//
|
|
45146
|
+
// node_modules/circle-ir/dist/analysis/passes/tls-verify-disabled-pass.js
|
|
45059
45147
|
var PY_HTTP_METHODS = new Set([
|
|
45060
45148
|
"get",
|
|
45061
45149
|
"post",
|
|
@@ -45268,7 +45356,7 @@ class TlsVerifyDisabledPass {
|
|
|
45268
45356
|
}
|
|
45269
45357
|
}
|
|
45270
45358
|
|
|
45271
|
-
//
|
|
45359
|
+
// node_modules/circle-ir/dist/analysis/passes/module-side-effect-pass.js
|
|
45272
45360
|
var JS_EXEC_METHODS = new Set([
|
|
45273
45361
|
"exec",
|
|
45274
45362
|
"spawn",
|
|
@@ -45499,7 +45587,7 @@ class ModuleSideEffectPass {
|
|
|
45499
45587
|
}
|
|
45500
45588
|
}
|
|
45501
45589
|
|
|
45502
|
-
//
|
|
45590
|
+
// node_modules/circle-ir/dist/analysis/passes/cache-no-vary-pass.js
|
|
45503
45591
|
function isSharedCacheable(value) {
|
|
45504
45592
|
const v = value.toLowerCase();
|
|
45505
45593
|
if (/\b(private|no-store|no-cache)\b/.test(v))
|
|
@@ -45786,7 +45874,7 @@ class CacheNoVaryPass {
|
|
|
45786
45874
|
}
|
|
45787
45875
|
}
|
|
45788
45876
|
|
|
45789
|
-
//
|
|
45877
|
+
// node_modules/circle-ir/dist/analysis/passes/jwt-verify-disabled-pass.js
|
|
45790
45878
|
var PY_VERIFY_SIGNATURE_FALSE_RE = /["']verify_signature["']\s*:\s*False\b/;
|
|
45791
45879
|
var PY_VERIFY_KW_FALSE_RE = /\bverify\s*=\s*False\b/;
|
|
45792
45880
|
var PY_ALG_NONE_RE = /\balgorithms\s*=\s*[\[\(]\s*["']none["']/i;
|
|
@@ -45911,7 +45999,7 @@ class JwtVerifyDisabledPass {
|
|
|
45911
45999
|
}
|
|
45912
46000
|
}
|
|
45913
46001
|
|
|
45914
|
-
//
|
|
46002
|
+
// node_modules/circle-ir/dist/analysis/passes/csrf-protection-disabled-pass.js
|
|
45915
46003
|
var JAVA_CSRF_DISABLE_RE = /\.csrf\s*\([^)]*\)\s*\.\s*disable\b/;
|
|
45916
46004
|
var JAVA_CSRF_LAMBDA_DISABLE_RE = /\bcsrf\s*\(\s*\w+\s*->\s*\w+\s*\.\s*disable\s*\(/;
|
|
45917
46005
|
var JAVA_CSRF_METHODREF_RE = /\bcsrf\s*\(\s*[\w.]+::disable\s*\)/;
|
|
@@ -46047,7 +46135,7 @@ class CsrfProtectionDisabledPass {
|
|
|
46047
46135
|
}
|
|
46048
46136
|
}
|
|
46049
46137
|
|
|
46050
|
-
//
|
|
46138
|
+
// node_modules/circle-ir/dist/analysis/passes/xml-entity-expansion-pass.js
|
|
46051
46139
|
var JAVA_FACTORIES = new Set([
|
|
46052
46140
|
"SAXParserFactory",
|
|
46053
46141
|
"DocumentBuilderFactory",
|
|
@@ -46187,7 +46275,7 @@ class XmlEntityExpansionPass {
|
|
|
46187
46275
|
}
|
|
46188
46276
|
}
|
|
46189
46277
|
|
|
46190
|
-
//
|
|
46278
|
+
// node_modules/circle-ir/dist/analysis/passes/mass-assignment-pass.js
|
|
46191
46279
|
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)/;
|
|
46192
46280
|
var JS_OBJECT_SPREAD_RE = /\{\s*\.\.\.\s*(?:req|request|ctx|context)(?:\.request)?\s*\.\s*(?:body|query|params|form)\b/;
|
|
46193
46281
|
|
|
@@ -46271,7 +46359,7 @@ class MassAssignmentPass {
|
|
|
46271
46359
|
}
|
|
46272
46360
|
}
|
|
46273
46361
|
|
|
46274
|
-
//
|
|
46362
|
+
// node_modules/circle-ir/dist/graph/import-graph.js
|
|
46275
46363
|
function dirname(filePath) {
|
|
46276
46364
|
const idx = filePath.lastIndexOf("/");
|
|
46277
46365
|
return idx >= 0 ? filePath.slice(0, idx) : "";
|
|
@@ -46404,7 +46492,7 @@ class ImportGraph2 {
|
|
|
46404
46492
|
}
|
|
46405
46493
|
}
|
|
46406
46494
|
|
|
46407
|
-
//
|
|
46495
|
+
// node_modules/circle-ir/dist/analysis/passes/circular-dependency-pass.js
|
|
46408
46496
|
class CircularDependencyPass {
|
|
46409
46497
|
run(_projectGraph, importGraph) {
|
|
46410
46498
|
const findings = [];
|
|
@@ -46431,7 +46519,7 @@ class CircularDependencyPass {
|
|
|
46431
46519
|
}
|
|
46432
46520
|
}
|
|
46433
46521
|
|
|
46434
|
-
//
|
|
46522
|
+
// node_modules/circle-ir/dist/analysis/passes/orphan-module-pass.js
|
|
46435
46523
|
class OrphanModulePass {
|
|
46436
46524
|
run(_projectGraph, importGraph) {
|
|
46437
46525
|
const findings = [];
|
|
@@ -46455,7 +46543,7 @@ class OrphanModulePass {
|
|
|
46455
46543
|
}
|
|
46456
46544
|
}
|
|
46457
46545
|
|
|
46458
|
-
//
|
|
46546
|
+
// node_modules/circle-ir/dist/analysis/metrics/passes/size-metrics-pass.js
|
|
46459
46547
|
class SizeMetricsPass {
|
|
46460
46548
|
name = "size-metrics";
|
|
46461
46549
|
run(ctx) {
|
|
@@ -46511,7 +46599,7 @@ class SizeMetricsPass {
|
|
|
46511
46599
|
}
|
|
46512
46600
|
}
|
|
46513
46601
|
|
|
46514
|
-
//
|
|
46602
|
+
// node_modules/circle-ir/dist/analysis/metrics/passes/complexity-metrics-pass.js
|
|
46515
46603
|
class ComplexityMetricsPass {
|
|
46516
46604
|
name = "complexity-metrics";
|
|
46517
46605
|
run(ctx) {
|
|
@@ -46575,7 +46663,7 @@ class ComplexityMetricsPass {
|
|
|
46575
46663
|
}
|
|
46576
46664
|
}
|
|
46577
46665
|
|
|
46578
|
-
//
|
|
46666
|
+
// node_modules/circle-ir/dist/analysis/metrics/passes/halstead-metrics-pass.js
|
|
46579
46667
|
var KEYWORDS = new Set([
|
|
46580
46668
|
"if",
|
|
46581
46669
|
"else",
|
|
@@ -46730,7 +46818,7 @@ class HalsteadMetricsPass {
|
|
|
46730
46818
|
}
|
|
46731
46819
|
}
|
|
46732
46820
|
|
|
46733
|
-
//
|
|
46821
|
+
// node_modules/circle-ir/dist/analysis/metrics/passes/data-flow-metrics-pass.js
|
|
46734
46822
|
class DataFlowMetricsPass {
|
|
46735
46823
|
name = "data-flow-metrics";
|
|
46736
46824
|
run(ctx) {
|
|
@@ -46748,7 +46836,7 @@ class DataFlowMetricsPass {
|
|
|
46748
46836
|
}
|
|
46749
46837
|
}
|
|
46750
46838
|
|
|
46751
|
-
//
|
|
46839
|
+
// node_modules/circle-ir/dist/analysis/metrics/passes/coupling-metrics-pass.js
|
|
46752
46840
|
class CouplingMetricsPass {
|
|
46753
46841
|
name = "coupling-metrics";
|
|
46754
46842
|
run(ctx) {
|
|
@@ -46826,7 +46914,7 @@ class CouplingMetricsPass {
|
|
|
46826
46914
|
}
|
|
46827
46915
|
}
|
|
46828
46916
|
|
|
46829
|
-
//
|
|
46917
|
+
// node_modules/circle-ir/dist/analysis/metrics/passes/inheritance-metrics-pass.js
|
|
46830
46918
|
class InheritanceMetricsPass {
|
|
46831
46919
|
name = "inheritance-metrics";
|
|
46832
46920
|
run(ctx) {
|
|
@@ -46886,7 +46974,7 @@ class InheritanceMetricsPass {
|
|
|
46886
46974
|
}
|
|
46887
46975
|
}
|
|
46888
46976
|
|
|
46889
|
-
//
|
|
46977
|
+
// node_modules/circle-ir/dist/analysis/metrics/passes/cohesion-metrics-pass.js
|
|
46890
46978
|
class CohesionMetricsPass {
|
|
46891
46979
|
name = "cohesion-metrics";
|
|
46892
46980
|
run(ctx) {
|
|
@@ -46969,7 +47057,7 @@ class CohesionMetricsPass {
|
|
|
46969
47057
|
}
|
|
46970
47058
|
}
|
|
46971
47059
|
|
|
46972
|
-
//
|
|
47060
|
+
// node_modules/circle-ir/dist/analysis/metrics/passes/documentation-metrics-pass.js
|
|
46973
47061
|
class DocumentationMetricsPass {
|
|
46974
47062
|
name = "documentation-metrics";
|
|
46975
47063
|
run(ctx) {
|
|
@@ -47022,7 +47110,7 @@ class DocumentationMetricsPass {
|
|
|
47022
47110
|
}
|
|
47023
47111
|
}
|
|
47024
47112
|
|
|
47025
|
-
//
|
|
47113
|
+
// node_modules/circle-ir/dist/analysis/metrics/passes/composite-metrics-pass.js
|
|
47026
47114
|
class CompositeMetricsPass {
|
|
47027
47115
|
name = "composite-metrics";
|
|
47028
47116
|
run(ctx) {
|
|
@@ -47081,7 +47169,7 @@ class CompositeMetricsPass {
|
|
|
47081
47169
|
}
|
|
47082
47170
|
}
|
|
47083
47171
|
|
|
47084
|
-
//
|
|
47172
|
+
// node_modules/circle-ir/dist/analysis/metrics/metric-runner.js
|
|
47085
47173
|
class MetricRunner {
|
|
47086
47174
|
passes = [
|
|
47087
47175
|
new SizeMetricsPass,
|
|
@@ -47103,7 +47191,7 @@ class MetricRunner {
|
|
|
47103
47191
|
return accumulated;
|
|
47104
47192
|
}
|
|
47105
47193
|
}
|
|
47106
|
-
//
|
|
47194
|
+
// node_modules/circle-ir/dist/analyzer.js
|
|
47107
47195
|
var initialized = false;
|
|
47108
47196
|
async function initAnalyzer(options = {}) {
|
|
47109
47197
|
if (initialized)
|
|
@@ -47775,7 +47863,7 @@ function deriveProjectRoot(paths) {
|
|
|
47775
47863
|
}
|
|
47776
47864
|
return common.join("/") || "/";
|
|
47777
47865
|
}
|
|
47778
|
-
//
|
|
47866
|
+
// node_modules/circle-ir/dist/analysis/sbom.js
|
|
47779
47867
|
function purlVersion(spec) {
|
|
47780
47868
|
const stripped = spec.trim().replace(/^[\s^~=<>]+/, "");
|
|
47781
47869
|
if (/^v?[0-9][\w.\-+]*$/.test(stripped))
|
|
@@ -48210,14 +48298,14 @@ function toSpdx(deps, meta = {}) {
|
|
|
48210
48298
|
relationships
|
|
48211
48299
|
};
|
|
48212
48300
|
}
|
|
48213
|
-
//
|
|
48214
|
-
import { relative as
|
|
48301
|
+
// node_modules/@cognium/project-profile-detect/dist/index.js
|
|
48302
|
+
import { relative as relative2 } from "path";
|
|
48215
48303
|
|
|
48216
|
-
//
|
|
48304
|
+
// node_modules/@cognium/project-profile-detect/dist/walk.js
|
|
48217
48305
|
import { readdir, readFile, stat } from "fs/promises";
|
|
48218
|
-
import { join, relative
|
|
48306
|
+
import { join, relative } from "path";
|
|
48219
48307
|
|
|
48220
|
-
//
|
|
48308
|
+
// node_modules/@cognium/project-profile-detect/dist/maven-parse.js
|
|
48221
48309
|
var TAG = (name2) => new RegExp(`<${name2}\\b[^>]*>([\\s\\S]*?)<\\/${name2}>`, "i");
|
|
48222
48310
|
var ALL_TAGS = (name2) => new RegExp(`<${name2}\\b[^>]*>([\\s\\S]*?)<\\/${name2}>`, "gi");
|
|
48223
48311
|
function firstTag(xml, name2) {
|
|
@@ -48241,12 +48329,7 @@ var MAVEN_PLUGIN_MAP = {
|
|
|
48241
48329
|
"exec-maven-plugin": "application",
|
|
48242
48330
|
"maven-assembly-plugin": "application"
|
|
48243
48331
|
};
|
|
48244
|
-
var MAVEN_PUBLISH_PLUGIN_URLS = {
|
|
48245
|
-
"central-publishing-maven-plugin": "https://central.sonatype.com/",
|
|
48246
|
-
"nexus-staging-maven-plugin": "https://oss.sonatype.org/"
|
|
48247
|
-
};
|
|
48248
48332
|
function parseMavenPom(xml, moduleRoot, buildFile, directorySignals) {
|
|
48249
|
-
const parentRef = extractParentRef(xml);
|
|
48250
48333
|
const stripped = xml.replace(/<parent\b[\s\S]*?<\/parent>/i, "");
|
|
48251
48334
|
const groupId = firstTag(stripped, "groupId");
|
|
48252
48335
|
const artifactId = firstTag(stripped, "artifactId");
|
|
@@ -48255,15 +48338,10 @@ function parseMavenPom(xml, moduleRoot, buildFile, directorySignals) {
|
|
|
48255
48338
|
const buildBlock = firstTag(xml, "build") ?? "";
|
|
48256
48339
|
const pluginBlocks = allTags(buildBlock, "plugin");
|
|
48257
48340
|
const plugins = new Set;
|
|
48258
|
-
const publishUrls = new Set;
|
|
48259
48341
|
for (const p of pluginBlocks) {
|
|
48260
48342
|
const aid = firstTag(p, "artifactId");
|
|
48261
|
-
if (
|
|
48262
|
-
continue;
|
|
48263
|
-
if (MAVEN_PLUGIN_MAP[aid])
|
|
48343
|
+
if (aid && MAVEN_PLUGIN_MAP[aid])
|
|
48264
48344
|
plugins.add(MAVEN_PLUGIN_MAP[aid]);
|
|
48265
|
-
if (MAVEN_PUBLISH_PLUGIN_URLS[aid])
|
|
48266
|
-
publishUrls.add(MAVEN_PUBLISH_PLUGIN_URLS[aid]);
|
|
48267
48345
|
}
|
|
48268
48346
|
if (/<parent\b[\s\S]*?<artifactId>\s*spring-boot-starter-parent\s*<\/artifactId>/i.test(xml)) {
|
|
48269
48347
|
plugins.add("spring-boot");
|
|
@@ -48276,8 +48354,7 @@ function parseMavenPom(xml, moduleRoot, buildFile, directorySignals) {
|
|
|
48276
48354
|
plugins.add("maven-plugin");
|
|
48277
48355
|
const distBlock = firstTag(xml, "distributionManagement") ?? "";
|
|
48278
48356
|
const urls = [
|
|
48279
|
-
...allTags(distBlock, "url")
|
|
48280
|
-
...publishUrls
|
|
48357
|
+
...allTags(distBlock, "url")
|
|
48281
48358
|
].map((u) => u.trim()).filter(Boolean);
|
|
48282
48359
|
const signals = {
|
|
48283
48360
|
...directorySignals,
|
|
@@ -48292,36 +48369,11 @@ function parseMavenPom(xml, moduleRoot, buildFile, directorySignals) {
|
|
|
48292
48369
|
groupId,
|
|
48293
48370
|
artifactId,
|
|
48294
48371
|
version,
|
|
48295
|
-
signals
|
|
48296
|
-
parentRef
|
|
48372
|
+
signals
|
|
48297
48373
|
};
|
|
48298
48374
|
}
|
|
48299
|
-
function extractParentRef(xml) {
|
|
48300
|
-
const block = TAG("parent").exec(xml);
|
|
48301
|
-
if (!block)
|
|
48302
|
-
return;
|
|
48303
|
-
const inner = block[1];
|
|
48304
|
-
const groupId = firstTag(inner, "groupId");
|
|
48305
|
-
const artifactId = firstTag(inner, "artifactId");
|
|
48306
|
-
const version = firstTag(inner, "version");
|
|
48307
|
-
let relativePath;
|
|
48308
|
-
let emptyRelativePath = false;
|
|
48309
|
-
const selfClosing = /<relativePath\b[^>]*\/\s*>/i.test(inner);
|
|
48310
|
-
if (selfClosing) {
|
|
48311
|
-
emptyRelativePath = true;
|
|
48312
|
-
} else {
|
|
48313
|
-
const rp = firstTag(inner, "relativePath");
|
|
48314
|
-
if (rp !== undefined) {
|
|
48315
|
-
if (rp.length === 0)
|
|
48316
|
-
emptyRelativePath = true;
|
|
48317
|
-
else
|
|
48318
|
-
relativePath = rp;
|
|
48319
|
-
}
|
|
48320
|
-
}
|
|
48321
|
-
return { groupId, artifactId, version, relativePath, emptyRelativePath };
|
|
48322
|
-
}
|
|
48323
48375
|
|
|
48324
|
-
//
|
|
48376
|
+
// node_modules/@cognium/project-profile-detect/dist/gradle-parse.js
|
|
48325
48377
|
var GRADLE_PLUGIN_MAP = {
|
|
48326
48378
|
"org.springframework.boot": "spring-boot",
|
|
48327
48379
|
"io.spring.dependency-management": "spring-boot",
|
|
@@ -48386,71 +48438,7 @@ function parseGradleBuild(text, moduleRoot, buildFile, buildSystem, directorySig
|
|
|
48386
48438
|
};
|
|
48387
48439
|
}
|
|
48388
48440
|
|
|
48389
|
-
//
|
|
48390
|
-
import { dirname as dirname2, isAbsolute, normalize, relative, resolve } from "path";
|
|
48391
|
-
var MAX_DEPTH = 6;
|
|
48392
|
-
var DEFAULT_RELATIVE_PATH = "../pom.xml";
|
|
48393
|
-
function mergeMavenInheritance(modules, scanRoot) {
|
|
48394
|
-
const normalizedScanRoot = normalize(scanRoot);
|
|
48395
|
-
const byBuildFile = new Map;
|
|
48396
|
-
for (const m of modules) {
|
|
48397
|
-
if (m.buildSystem === "maven") {
|
|
48398
|
-
byBuildFile.set(normalize(m.buildFile), m);
|
|
48399
|
-
}
|
|
48400
|
-
}
|
|
48401
|
-
for (const child of modules) {
|
|
48402
|
-
if (child.buildSystem !== "maven")
|
|
48403
|
-
continue;
|
|
48404
|
-
if (!child.parentRef)
|
|
48405
|
-
continue;
|
|
48406
|
-
const inheritedUrls = new Set;
|
|
48407
|
-
const inheritedPlugins = new Set;
|
|
48408
|
-
walkParents(child, byBuildFile, normalizedScanRoot, inheritedUrls, inheritedPlugins);
|
|
48409
|
-
if (inheritedUrls.size === 0 && inheritedPlugins.size === 0)
|
|
48410
|
-
continue;
|
|
48411
|
-
const existingUrls = new Set(child.signals.distributionUrls);
|
|
48412
|
-
for (const u of inheritedUrls) {
|
|
48413
|
-
if (!existingUrls.has(u))
|
|
48414
|
-
child.signals.distributionUrls.push(u);
|
|
48415
|
-
}
|
|
48416
|
-
const existingPlugins = new Set(child.signals.plugins);
|
|
48417
|
-
for (const p of inheritedPlugins) {
|
|
48418
|
-
if (!existingPlugins.has(p))
|
|
48419
|
-
child.signals.plugins.push(p);
|
|
48420
|
-
}
|
|
48421
|
-
}
|
|
48422
|
-
}
|
|
48423
|
-
function walkParents(start2, byBuildFile, scanRoot, outUrls, outPlugins) {
|
|
48424
|
-
const visited = new Set([normalize(start2.buildFile)]);
|
|
48425
|
-
let current = start2;
|
|
48426
|
-
for (let depth = 0;depth < MAX_DEPTH; depth++) {
|
|
48427
|
-
const ref = current.parentRef;
|
|
48428
|
-
if (!ref)
|
|
48429
|
-
return;
|
|
48430
|
-
if (ref.emptyRelativePath)
|
|
48431
|
-
return;
|
|
48432
|
-
const childDir = dirname2(current.buildFile);
|
|
48433
|
-
const rel = ref.relativePath ?? DEFAULT_RELATIVE_PATH;
|
|
48434
|
-
const candidateAbs = normalize(isAbsolute(rel) ? rel : resolve(childDir, rel));
|
|
48435
|
-
const parentBuildFile = candidateAbs.endsWith("pom.xml") ? candidateAbs : normalize(resolve(candidateAbs, "pom.xml"));
|
|
48436
|
-
const relToRoot = relative(scanRoot, parentBuildFile);
|
|
48437
|
-
if (relToRoot.startsWith("..") || isAbsolute(relToRoot))
|
|
48438
|
-
return;
|
|
48439
|
-
if (visited.has(parentBuildFile))
|
|
48440
|
-
return;
|
|
48441
|
-
visited.add(parentBuildFile);
|
|
48442
|
-
const parent = byBuildFile.get(parentBuildFile);
|
|
48443
|
-
if (!parent)
|
|
48444
|
-
return;
|
|
48445
|
-
for (const u of parent.signals.distributionUrls)
|
|
48446
|
-
outUrls.add(u);
|
|
48447
|
-
for (const p of parent.signals.plugins)
|
|
48448
|
-
outPlugins.add(p);
|
|
48449
|
-
current = parent;
|
|
48450
|
-
}
|
|
48451
|
-
}
|
|
48452
|
-
|
|
48453
|
-
// ../project-profile-detect/dist/walk.js
|
|
48441
|
+
// node_modules/@cognium/project-profile-detect/dist/walk.js
|
|
48454
48442
|
var BUILD_FILES = ["pom.xml", "build.gradle", "build.gradle.kts"];
|
|
48455
48443
|
var SKIP_DIRS = new Set([
|
|
48456
48444
|
"node_modules",
|
|
@@ -48470,7 +48458,6 @@ var SKIP_DIRS = new Set([
|
|
|
48470
48458
|
async function discoverBuildModules(scanRoot) {
|
|
48471
48459
|
const modules = [];
|
|
48472
48460
|
await walk(scanRoot, modules);
|
|
48473
|
-
mergeMavenInheritance(modules, scanRoot);
|
|
48474
48461
|
return modules;
|
|
48475
48462
|
}
|
|
48476
48463
|
async function walk(dir, out2) {
|
|
@@ -48612,7 +48599,7 @@ function ownerOf(file, modules) {
|
|
|
48612
48599
|
return best;
|
|
48613
48600
|
}
|
|
48614
48601
|
|
|
48615
|
-
//
|
|
48602
|
+
// node_modules/@cognium/project-profile-detect/dist/publication-detect.js
|
|
48616
48603
|
var PUBLIC_REGISTRY_HOSTS = new Set([
|
|
48617
48604
|
"repo.maven.apache.org",
|
|
48618
48605
|
"repo1.maven.org",
|
|
@@ -48637,7 +48624,7 @@ function isPubliclyPublished(urls) {
|
|
|
48637
48624
|
return false;
|
|
48638
48625
|
}
|
|
48639
48626
|
|
|
48640
|
-
//
|
|
48627
|
+
// node_modules/@cognium/project-profile-detect/dist/shape-resolve.js
|
|
48641
48628
|
function resolveShape(mod) {
|
|
48642
48629
|
const sig = mod.signals;
|
|
48643
48630
|
const has = (tag) => sig.plugins.includes(tag);
|
|
@@ -48678,15 +48665,11 @@ function resolveShape(mod) {
|
|
|
48678
48665
|
reasons.push(...libSignals, "no public-registry distribution (internal helper)");
|
|
48679
48666
|
return { shape: "application", reasons };
|
|
48680
48667
|
}
|
|
48681
|
-
if (isPubliclyPublished(sig.distributionUrls)) {
|
|
48682
|
-
reasons.push("public-registry distribution", "no application/server/plugin signals → implicit library");
|
|
48683
|
-
return { shape: "library", reasons };
|
|
48684
|
-
}
|
|
48685
48668
|
reasons.push("no shape signals");
|
|
48686
48669
|
return { shape: "unknown", reasons };
|
|
48687
48670
|
}
|
|
48688
48671
|
|
|
48689
|
-
//
|
|
48672
|
+
// node_modules/@cognium/project-profile-detect/dist/env-resolve.js
|
|
48690
48673
|
var TEST_RE = /(?:^|\/)tests?\//;
|
|
48691
48674
|
var SAMPLE_RE = /(?:^|\/)(?:samples?|examples?|demos?|fixtures?)\//;
|
|
48692
48675
|
var BENCHMARK_RE = /(?:^|\/)benchmarks?\//;
|
|
@@ -48704,7 +48687,7 @@ function resolveEnv(absoluteFile) {
|
|
|
48704
48687
|
return "dev";
|
|
48705
48688
|
}
|
|
48706
48689
|
|
|
48707
|
-
//
|
|
48690
|
+
// node_modules/@cognium/project-profile-detect/dist/overrides.js
|
|
48708
48691
|
function compileGlob(glob) {
|
|
48709
48692
|
let re = "";
|
|
48710
48693
|
let i2 = 0;
|
|
@@ -48751,7 +48734,7 @@ function applyOverrides(relativePath, compiled) {
|
|
|
48751
48734
|
return;
|
|
48752
48735
|
}
|
|
48753
48736
|
|
|
48754
|
-
//
|
|
48737
|
+
// node_modules/@cognium/project-profile-detect/dist/index.js
|
|
48755
48738
|
async function detectProjectProfiles(scanRoot, options = {}) {
|
|
48756
48739
|
const modules = await discoverBuildModules(scanRoot);
|
|
48757
48740
|
const files = await enumerateScanFiles(scanRoot);
|
|
@@ -48769,7 +48752,7 @@ async function detectProjectProfiles(scanRoot, options = {}) {
|
|
|
48769
48752
|
const profileByFile = new Map;
|
|
48770
48753
|
const unknownFiles = [];
|
|
48771
48754
|
for (const file of files) {
|
|
48772
|
-
const rel =
|
|
48755
|
+
const rel = relative2(scanRoot, file);
|
|
48773
48756
|
const ov = applyOverrides(rel, compiledOverrides);
|
|
48774
48757
|
if (ov) {
|
|
48775
48758
|
profileByFile.set(file, ov.profile);
|
|
@@ -48821,7 +48804,7 @@ var colors = {
|
|
|
48821
48804
|
};
|
|
48822
48805
|
|
|
48823
48806
|
// src/version.ts
|
|
48824
|
-
var version = "4.9.
|
|
48807
|
+
var version = "4.9.11";
|
|
48825
48808
|
|
|
48826
48809
|
// src/formatters.ts
|
|
48827
48810
|
var LIBRARY_API_SURFACE_TAG2 = "library-api-surface:caller-responsibility";
|
|
@@ -49374,8 +49357,8 @@ function generateSarifResults(results, crossFileData) {
|
|
|
49374
49357
|
|
|
49375
49358
|
// src/build-info.ts
|
|
49376
49359
|
var buildInfo = {
|
|
49377
|
-
gitSha: "
|
|
49378
|
-
builtAt: "2026-
|
|
49360
|
+
gitSha: "6c811aa",
|
|
49361
|
+
builtAt: "2026-09-10T06:22:49.258Z"
|
|
49379
49362
|
};
|
|
49380
49363
|
|
|
49381
49364
|
// src/utils/args.ts
|
|
@@ -49663,7 +49646,7 @@ function applySuppressionsToResults(results, suppressions, basePath) {
|
|
|
49663
49646
|
if (suppressions.length === 0)
|
|
49664
49647
|
return results;
|
|
49665
49648
|
return results.map((result) => {
|
|
49666
|
-
const relativeFile =
|
|
49649
|
+
const relativeFile = relative3(basePath, result.file) || result.file;
|
|
49667
49650
|
const filteredVulns = result.vulnerabilities.filter((vuln) => {
|
|
49668
49651
|
for (const supp of suppressions) {
|
|
49669
49652
|
if (supp.pass !== vuln.type)
|
|
@@ -49719,6 +49702,22 @@ var LANG_MAP = {
|
|
|
49719
49702
|
".html": "html",
|
|
49720
49703
|
".htm": "html"
|
|
49721
49704
|
};
|
|
49705
|
+
var VULN_SEVERITY_RANK = { critical: 3, high: 2, medium: 1, low: 0 };
|
|
49706
|
+
function dedupeVulnerabilities(vulns) {
|
|
49707
|
+
const best = new Map;
|
|
49708
|
+
const order = [];
|
|
49709
|
+
for (const v of vulns) {
|
|
49710
|
+
const key = `${v.type}:${v.line}`;
|
|
49711
|
+
const current = best.get(key);
|
|
49712
|
+
if (current === undefined) {
|
|
49713
|
+
best.set(key, v);
|
|
49714
|
+
order.push(key);
|
|
49715
|
+
} else if ((VULN_SEVERITY_RANK[v.severity] ?? -1) > (VULN_SEVERITY_RANK[current.severity] ?? -1)) {
|
|
49716
|
+
best.set(key, v);
|
|
49717
|
+
}
|
|
49718
|
+
}
|
|
49719
|
+
return order.map((k) => best.get(k));
|
|
49720
|
+
}
|
|
49722
49721
|
function detectLanguage7(filePath) {
|
|
49723
49722
|
const ext = extname(filePath).toLowerCase();
|
|
49724
49723
|
return LANG_MAP[ext] || null;
|
|
@@ -49753,7 +49752,7 @@ async function collectFiles(targetPath, options = {}) {
|
|
|
49753
49752
|
return files;
|
|
49754
49753
|
}
|
|
49755
49754
|
if (fileMatchesLanguage(targetPath, language)) {
|
|
49756
|
-
const relativePath = basePath ?
|
|
49755
|
+
const relativePath = basePath ? relative3(basePath, targetPath) : targetPath;
|
|
49757
49756
|
if (includePatterns && includePatterns.length > 0) {
|
|
49758
49757
|
if (!matchesAnyPattern(relativePath, includePatterns)) {
|
|
49759
49758
|
return files;
|
|
@@ -49772,7 +49771,7 @@ async function collectFiles(targetPath, options = {}) {
|
|
|
49772
49771
|
if (excludeTests && /^(test|tests|__tests__|spec|__mocks__)$/i.test(entry.name))
|
|
49773
49772
|
continue;
|
|
49774
49773
|
const fullPath = join2(targetPath, entry.name);
|
|
49775
|
-
const relativePath = basePath ?
|
|
49774
|
+
const relativePath = basePath ? relative3(basePath, fullPath) : fullPath;
|
|
49776
49775
|
if (excludePatterns && entry.isDirectory()) {
|
|
49777
49776
|
const dirPattern = relativePath + "/";
|
|
49778
49777
|
if (excludePatterns.some((p) => matchesGlob(dirPattern, p) || matchesGlob(relativePath, p))) {
|
|
@@ -49813,7 +49812,7 @@ async function scanFile(filePath, language, analyzeOpts) {
|
|
|
49813
49812
|
...finding.tags && finding.tags.length > 0 ? { tags: [...finding.tags] } : {}
|
|
49814
49813
|
});
|
|
49815
49814
|
}
|
|
49816
|
-
return { file: filePath, vulnerabilities };
|
|
49815
|
+
return { file: filePath, vulnerabilities: dedupeVulnerabilities(vulnerabilities) };
|
|
49817
49816
|
} catch (error) {
|
|
49818
49817
|
return {
|
|
49819
49818
|
file: filePath,
|
|
@@ -49856,7 +49855,7 @@ async function scanProject(files, language, analyzeOpts, crossFileBudgetMs) {
|
|
|
49856
49855
|
...finding.tags && finding.tags.length > 0 ? { tags: [...finding.tags] } : {}
|
|
49857
49856
|
});
|
|
49858
49857
|
}
|
|
49859
|
-
return { file, vulnerabilities };
|
|
49858
|
+
return { file, vulnerabilities: dedupeVulnerabilities(vulnerabilities) };
|
|
49860
49859
|
});
|
|
49861
49860
|
return {
|
|
49862
49861
|
results,
|
|
@@ -49870,14 +49869,14 @@ async function scanProject(files, language, analyzeOpts, crossFileBudgetMs) {
|
|
|
49870
49869
|
async function initWasm(spin) {
|
|
49871
49870
|
const isStandalone = import.meta.url.includes("/$bunfs/");
|
|
49872
49871
|
if (isStandalone) {
|
|
49873
|
-
const { dirname:
|
|
49874
|
-
const binaryDir =
|
|
49872
|
+
const { dirname: dirname3, join: join3 } = await import("path");
|
|
49873
|
+
const binaryDir = dirname3(process.execPath);
|
|
49875
49874
|
const cwd = process.cwd();
|
|
49876
49875
|
let scriptDir = null;
|
|
49877
49876
|
if (!import.meta.url.includes("/$bunfs/")) {
|
|
49878
49877
|
try {
|
|
49879
49878
|
const { fileURLToPath } = await import("url");
|
|
49880
|
-
scriptDir =
|
|
49879
|
+
scriptDir = dirname3(fileURLToPath(import.meta.url));
|
|
49881
49880
|
} catch {}
|
|
49882
49881
|
}
|
|
49883
49882
|
const wasmLocations = [
|
|
@@ -49932,7 +49931,7 @@ Please ensure the wasm/ directory is located next to the binary or in your curre
|
|
|
49932
49931
|
} else {
|
|
49933
49932
|
const require2 = createRequire2(import.meta.url);
|
|
49934
49933
|
const circleIrPkg = require2.resolve("circle-ir/package.json");
|
|
49935
|
-
const wasmBasePath = join2(
|
|
49934
|
+
const wasmBasePath = join2(dirname2(circleIrPkg), "dist", "wasm") + "/";
|
|
49936
49935
|
await initAnalyzer({
|
|
49937
49936
|
wasmPath: wasmBasePath + "web-tree-sitter.wasm",
|
|
49938
49937
|
languagePaths: {
|
|
@@ -49963,7 +49962,7 @@ function buildProfileSummary(scanRoot, modules, resolvedProfiles) {
|
|
|
49963
49962
|
return {
|
|
49964
49963
|
scanRoot,
|
|
49965
49964
|
modules: modules.map((m) => ({
|
|
49966
|
-
root:
|
|
49965
|
+
root: relative3(scanRoot, m.module.root) || ".",
|
|
49967
49966
|
profile: m.profile,
|
|
49968
49967
|
reasons: m.reasons,
|
|
49969
49968
|
buildSystem: m.module.buildSystem
|
|
@@ -49992,9 +49991,9 @@ function printProfileExplain(scanRoot, detection) {
|
|
|
49992
49991
|
out2.push(" (no pom.xml, build.gradle, or build.gradle.kts found)");
|
|
49993
49992
|
} else {
|
|
49994
49993
|
for (const r of detection.modules) {
|
|
49995
|
-
const rel =
|
|
49994
|
+
const rel = relative3(scanRoot, r.module.root) || ".";
|
|
49996
49995
|
out2.push(` ${colors.cyan(rel || ".")} → ${colors.bold(r.profile)}`);
|
|
49997
|
-
out2.push(` build: ${r.module.buildSystem} (${
|
|
49996
|
+
out2.push(` build: ${r.module.buildSystem} (${relative3(scanRoot, r.module.buildFile)})`);
|
|
49998
49997
|
if (r.module.artifactId) {
|
|
49999
49998
|
out2.push(` coords: ${r.module.groupId ?? "?"}:${r.module.artifactId}:${r.module.version ?? "?"}`);
|
|
50000
49999
|
}
|
|
@@ -50039,7 +50038,7 @@ async function runScan(targetPath, options) {
|
|
|
50039
50038
|
await initWasm(spin);
|
|
50040
50039
|
if (spin)
|
|
50041
50040
|
spin.text = "Collecting files...";
|
|
50042
|
-
const absPath =
|
|
50041
|
+
const absPath = resolve(targetPath);
|
|
50043
50042
|
if (!existsSync(absPath)) {
|
|
50044
50043
|
if (spin)
|
|
50045
50044
|
spin.fail(`Path not found: ${absPath}`);
|
|
@@ -50103,7 +50102,7 @@ async function runScan(targetPath, options) {
|
|
|
50103
50102
|
results = [];
|
|
50104
50103
|
let processed = 0;
|
|
50105
50104
|
const formatCurrentFile = (file) => {
|
|
50106
|
-
const rel =
|
|
50105
|
+
const rel = relative3(absPath, file) || file;
|
|
50107
50106
|
return rel.length > 80 ? `...${rel.slice(-77)}` : rel;
|
|
50108
50107
|
};
|
|
50109
50108
|
const concurrency = options.threads;
|
|
@@ -50279,7 +50278,7 @@ async function runMetrics(targetPath, options) {
|
|
|
50279
50278
|
await initWasm(spin);
|
|
50280
50279
|
if (spin)
|
|
50281
50280
|
spin.text = "Collecting files...";
|
|
50282
|
-
const absPath =
|
|
50281
|
+
const absPath = resolve(targetPath);
|
|
50283
50282
|
if (!existsSync(absPath)) {
|
|
50284
50283
|
if (spin)
|
|
50285
50284
|
spin.fail(`Path not found: ${absPath}`);
|
|
@@ -50307,7 +50306,7 @@ async function runMetrics(targetPath, options) {
|
|
|
50307
50306
|
continue;
|
|
50308
50307
|
}
|
|
50309
50308
|
if (spin) {
|
|
50310
|
-
const rel =
|
|
50309
|
+
const rel = relative3(absPath, file) || file;
|
|
50311
50310
|
const maxLen = 80;
|
|
50312
50311
|
const label = rel.length > maxLen ? `...${rel.slice(-(maxLen - 3))}` : rel;
|
|
50313
50312
|
spin.text = `Analyzing ${label}... (${processed}/${totalFiles})`;
|
|
@@ -50352,7 +50351,7 @@ async function runMetrics(targetPath, options) {
|
|
|
50352
50351
|
} else {
|
|
50353
50352
|
const lines = [];
|
|
50354
50353
|
for (const fm of filtered) {
|
|
50355
|
-
const rel =
|
|
50354
|
+
const rel = relative3(absPath, fm.file) || fm.file;
|
|
50356
50355
|
lines.push(rel);
|
|
50357
50356
|
const byCategory = new Map;
|
|
50358
50357
|
for (const m of fm.metrics) {
|
|
@@ -50580,7 +50579,7 @@ async function collectManifestFiles(targetPath) {
|
|
|
50580
50579
|
return found;
|
|
50581
50580
|
}
|
|
50582
50581
|
async function runSbom(targetPath, options) {
|
|
50583
|
-
const absPath =
|
|
50582
|
+
const absPath = resolve(targetPath);
|
|
50584
50583
|
if (!existsSync(absPath)) {
|
|
50585
50584
|
console.error(colors.red(`Error: path not found: ${targetPath}`));
|
|
50586
50585
|
process.exit(2);
|
|
@@ -50594,9 +50593,9 @@ async function runSbom(targetPath, options) {
|
|
|
50594
50593
|
for (const m of manifests) {
|
|
50595
50594
|
const superseded = SBOM_SUPERSEDES[basename(m)];
|
|
50596
50595
|
if (superseded)
|
|
50597
|
-
supersededInDir.add(`${
|
|
50596
|
+
supersededInDir.add(`${dirname2(m)}\x00${superseded}`);
|
|
50598
50597
|
}
|
|
50599
|
-
const effective = manifests.filter((m) => !supersededInDir.has(`${
|
|
50598
|
+
const effective = manifests.filter((m) => !supersededInDir.has(`${dirname2(m)}\x00${basename(m)}`));
|
|
50600
50599
|
let projectName = options.name;
|
|
50601
50600
|
let projectLicense;
|
|
50602
50601
|
{
|
|
@@ -50756,6 +50755,7 @@ export {
|
|
|
50756
50755
|
loadConfig,
|
|
50757
50756
|
isTestFile2 as isTestFile,
|
|
50758
50757
|
detectLanguage7 as detectLanguage,
|
|
50758
|
+
dedupeVulnerabilities,
|
|
50759
50759
|
convertConfigToPassOptions,
|
|
50760
50760
|
applySuppressionsToResults,
|
|
50761
50761
|
PASS_REGISTRY
|