circle-ir 3.154.0 → 3.156.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/configs/sinks/code_injection.yaml +2 -1
  2. package/configs/sinks/javascript_dom_xss.yaml +4 -2
  3. package/configs/sinks/xpath.yaml +40 -0
  4. package/dist/analysis/config-loader.d.ts.map +1 -1
  5. package/dist/analysis/config-loader.js +3 -0
  6. package/dist/analysis/config-loader.js.map +1 -1
  7. package/dist/analysis/dfg-walk.d.ts +36 -0
  8. package/dist/analysis/dfg-walk.d.ts.map +1 -0
  9. package/dist/analysis/dfg-walk.js +59 -0
  10. package/dist/analysis/dfg-walk.js.map +1 -0
  11. package/dist/analysis/passes/language-sources-pass.d.ts.map +1 -1
  12. package/dist/analysis/passes/language-sources-pass.js +22 -0
  13. package/dist/analysis/passes/language-sources-pass.js.map +1 -1
  14. package/dist/analysis/passes/mybatis-annotation-sql-sink-pass.d.ts +49 -0
  15. package/dist/analysis/passes/mybatis-annotation-sql-sink-pass.d.ts.map +1 -0
  16. package/dist/analysis/passes/mybatis-annotation-sql-sink-pass.js +329 -0
  17. package/dist/analysis/passes/mybatis-annotation-sql-sink-pass.js.map +1 -0
  18. package/dist/analysis/passes/weak-crypto-pass.d.ts.map +1 -1
  19. package/dist/analysis/passes/weak-crypto-pass.js +6 -0
  20. package/dist/analysis/passes/weak-crypto-pass.js.map +1 -1
  21. package/dist/analysis/path-classification.d.ts +24 -0
  22. package/dist/analysis/path-classification.d.ts.map +1 -0
  23. package/dist/analysis/path-classification.js +69 -0
  24. package/dist/analysis/path-classification.js.map +1 -0
  25. package/dist/analysis/taint-matcher.d.ts.map +1 -1
  26. package/dist/analysis/taint-matcher.js +30 -0
  27. package/dist/analysis/taint-matcher.js.map +1 -1
  28. package/dist/analysis/taint-propagation.d.ts +17 -1
  29. package/dist/analysis/taint-propagation.d.ts.map +1 -1
  30. package/dist/analysis/taint-propagation.js +47 -16
  31. package/dist/analysis/taint-propagation.js.map +1 -1
  32. package/dist/analyzer.d.ts.map +1 -1
  33. package/dist/analyzer.js +8 -0
  34. package/dist/analyzer.js.map +1 -1
  35. package/dist/browser/circle-ir.js +475 -12
  36. package/dist/core/circle-ir-core.cjs +96 -12
  37. package/dist/core/circle-ir-core.js +96 -12
  38. package/dist/graph/code-graph.d.ts +7 -0
  39. package/dist/graph/code-graph.d.ts.map +1 -1
  40. package/dist/graph/code-graph.js +17 -0
  41. package/dist/graph/code-graph.js.map +1 -1
  42. package/dist/resolution/type-hierarchy.d.ts +15 -0
  43. package/dist/resolution/type-hierarchy.d.ts.map +1 -1
  44. package/dist/resolution/type-hierarchy.js +159 -0
  45. package/dist/resolution/type-hierarchy.js.map +1 -1
  46. package/package.json +1 -1
@@ -12297,6 +12297,9 @@ var DEFAULT_SANITIZERS = [
12297
12297
  { method: "parseDouble", class: "Double", removes: ["sql_injection", "command_injection", "path_traversal", "code_injection"] },
12298
12298
  { method: "parseShort", class: "Short", removes: ["sql_injection", "command_injection", "path_traversal", "code_injection"] },
12299
12299
  { method: "parseByte", class: "Byte", removes: ["sql_injection", "command_injection", "path_traversal", "code_injection"] },
12300
+ // cognium-dev #238 A.3 — parseBoolean and expanded coercion coverage for XSS/CRLF/log/xpath/ldap/xxe.
12301
+ // A parsed boolean/numeric cannot carry a string-injection payload for any string-based sink.
12302
+ { method: "parseBoolean", class: "Boolean", removes: ["sql_injection", "command_injection", "path_traversal", "code_injection", "xss", "crlf", "log_injection", "xpath_injection", "ldap_injection", "xxe"] },
12300
12303
  // Java UUID parse — UUID.fromString rejects non-UUID strings
12301
12304
  { method: "fromString", class: "UUID", removes: ["sql_injection", "command_injection", "path_traversal", "code_injection"] },
12302
12305
  // JavaScript numeric coercion (Number/parseInt/parseFloat already covered above; add path_traversal/code_injection)
@@ -13490,8 +13493,11 @@ function matchesSinkPattern(call, pattern, typeHierarchy, language) {
13490
13493
  if (pattern.class === "constructor") {
13491
13494
  return true;
13492
13495
  }
13496
+ const subtypeArgArityOk = !pattern.arg_positions || pattern.arg_positions.length === 0 || pattern.arg_positions.every((pos) => pos < (call.arguments?.length ?? 0));
13493
13497
  if (call.receiver_type && call.receiver_type === pattern.class) {
13498
+ } else if (call.receiver_type && typeHierarchy && subtypeArgArityOk && typeHierarchy.isSubtypeOf(call.receiver_type, pattern.class)) {
13494
13499
  } else if (call.receiver_type_fqn && call.receiver_type_fqn.endsWith("." + pattern.class)) {
13500
+ } else if (call.receiver_type_fqn && typeHierarchy && subtypeArgArityOk && typeHierarchy.isSubtypeOf(call.receiver_type_fqn, pattern.class)) {
13495
13501
  } else if (call.receiver && !receiverMightBeClass(call.receiver, pattern.class)) {
13496
13502
  if (typeHierarchy && typeHierarchy.couldBeType(call.receiver, pattern.class)) {
13497
13503
  return true;
@@ -14046,6 +14052,23 @@ var CodeGraph = class {
14046
14052
  }
14047
14053
  return this._chainsByFromDef;
14048
14054
  }
14055
+ /**
14056
+ * Mirror of chainsByFromDef keyed by chain.to_def. Enables backward
14057
+ * walks from a use's reaching def to earlier defs in the chain
14058
+ * (cognium-dev #238 — DFG-walk sanitizer credit).
14059
+ */
14060
+ _chainsByToDef = null;
14061
+ get chainsByToDef() {
14062
+ if (!this._chainsByToDef) {
14063
+ this._chainsByToDef = /* @__PURE__ */ new Map();
14064
+ for (const chain of this.ir.dfg.chains ?? []) {
14065
+ const arr = this._chainsByToDef.get(chain.to_def) ?? [];
14066
+ arr.push(chain);
14067
+ this._chainsByToDef.set(chain.to_def, arr);
14068
+ }
14069
+ }
14070
+ return this._chainsByToDef;
14071
+ }
14049
14072
  // ---------------------------------------------------------------------------
14050
14073
  // Call indexes
14051
14074
  // ---------------------------------------------------------------------------
@@ -14216,6 +14239,43 @@ var CodeGraph = class {
14216
14239
  }
14217
14240
  };
14218
14241
 
14242
+ // src/analysis/dfg-walk.ts
14243
+ function walkBackwardDefs(startDefId, chainsByToDef, defById, options = {}) {
14244
+ const maxHops = options.maxHops ?? 32;
14245
+ const visited = /* @__PURE__ */ new Set();
14246
+ const lines = /* @__PURE__ */ new Set();
14247
+ let hopCapReached = false;
14248
+ const startDef = defById.get(startDefId);
14249
+ if (!startDef) {
14250
+ return { visited, lines, hopCapReached: false };
14251
+ }
14252
+ visited.add(startDefId);
14253
+ lines.add(startDef.line);
14254
+ const queue = [startDefId];
14255
+ let hops = 0;
14256
+ while (queue.length > 0) {
14257
+ if (hops >= maxHops) {
14258
+ hopCapReached = true;
14259
+ break;
14260
+ }
14261
+ hops++;
14262
+ const currentId = queue.shift();
14263
+ const incoming = chainsByToDef.get(currentId);
14264
+ if (!incoming) continue;
14265
+ for (const chain of incoming) {
14266
+ const fromId = chain.from_def;
14267
+ if (visited.has(fromId)) continue;
14268
+ visited.add(fromId);
14269
+ const fromDef = defById.get(fromId);
14270
+ if (fromDef) {
14271
+ lines.add(fromDef.line);
14272
+ }
14273
+ queue.push(fromId);
14274
+ }
14275
+ }
14276
+ return { visited, lines, hopCapReached };
14277
+ }
14278
+
14219
14279
  // src/analysis/taint-propagation.ts
14220
14280
  function buildSanitizersByLine(sanitizers) {
14221
14281
  const out2 = /* @__PURE__ */ new Map();
@@ -14303,7 +14363,12 @@ function propagateTaint(graphOrDfg, callsOrSources, sourcesOrSinks, sinksOrSanit
14303
14363
  taintInfo.line,
14304
14364
  sink.line,
14305
14365
  sink.type,
14306
- sanitizersByLine
14366
+ sanitizersByLine,
14367
+ {
14368
+ startDefId: use.def_id,
14369
+ chainsByToDef: graph.chainsByToDef,
14370
+ defById
14371
+ }
14307
14372
  );
14308
14373
  if (!isSanitized.sanitized) {
14309
14374
  const source = sources.find((s) => s.line === taintInfo.sourceLine);
@@ -14441,20 +14506,39 @@ var KNOWN_SINK_TYPES = /* @__PURE__ */ new Set([
14441
14506
  "crlf",
14442
14507
  "mass_assignment"
14443
14508
  ]);
14444
- function checkSanitized(_fromLine, toLine, sinkType, sanitizersByLine) {
14445
- const sanitizersAtTarget = sanitizersByLine.get(toLine);
14446
- if (!sanitizersAtTarget || sanitizersAtTarget.length === 0) {
14447
- return { sanitized: false };
14448
- }
14509
+ function checkSanitized(_fromLine, toLine, sinkType, sanitizersByLine, ctx) {
14449
14510
  const isKnownSinkType = KNOWN_SINK_TYPES.has(sinkType);
14450
- for (const san of sanitizersAtTarget) {
14451
- if (isKnownSinkType) {
14452
- if (san.sanitizes.includes(sinkType)) {
14511
+ const sanitizersAtTarget = sanitizersByLine.get(toLine);
14512
+ if (sanitizersAtTarget && sanitizersAtTarget.length > 0) {
14513
+ for (const san of sanitizersAtTarget) {
14514
+ if (isKnownSinkType) {
14515
+ if (san.sanitizes.includes(sinkType)) {
14516
+ return { sanitized: true, sanitizer: san };
14517
+ }
14518
+ } else if (san.sanitizes.length > 0) {
14453
14519
  return { sanitized: true, sanitizer: san };
14454
14520
  }
14455
- } else {
14456
- if (san.sanitizes.length > 0) {
14457
- return { sanitized: true, sanitizer: san };
14521
+ }
14522
+ }
14523
+ if (ctx) {
14524
+ const walk = walkBackwardDefs(
14525
+ ctx.startDefId,
14526
+ ctx.chainsByToDef,
14527
+ ctx.defById,
14528
+ { maxHops: ctx.maxHops ?? 32 }
14529
+ );
14530
+ for (const line of walk.lines) {
14531
+ if (line === toLine) continue;
14532
+ const sansAtLine = sanitizersByLine.get(line);
14533
+ if (!sansAtLine || sansAtLine.length === 0) continue;
14534
+ for (const san of sansAtLine) {
14535
+ if (isKnownSinkType) {
14536
+ if (san.sanitizes.includes(sinkType)) {
14537
+ return { sanitized: true, sanitizer: san };
14538
+ }
14539
+ } else if (san.sanitizes.length > 0) {
14540
+ return { sanitized: true, sanitizer: san };
14541
+ }
14458
14542
  }
14459
14543
  }
14460
14544
  }
@@ -12231,6 +12231,9 @@ var DEFAULT_SANITIZERS = [
12231
12231
  { method: "parseDouble", class: "Double", removes: ["sql_injection", "command_injection", "path_traversal", "code_injection"] },
12232
12232
  { method: "parseShort", class: "Short", removes: ["sql_injection", "command_injection", "path_traversal", "code_injection"] },
12233
12233
  { method: "parseByte", class: "Byte", removes: ["sql_injection", "command_injection", "path_traversal", "code_injection"] },
12234
+ // cognium-dev #238 A.3 — parseBoolean and expanded coercion coverage for XSS/CRLF/log/xpath/ldap/xxe.
12235
+ // A parsed boolean/numeric cannot carry a string-injection payload for any string-based sink.
12236
+ { method: "parseBoolean", class: "Boolean", removes: ["sql_injection", "command_injection", "path_traversal", "code_injection", "xss", "crlf", "log_injection", "xpath_injection", "ldap_injection", "xxe"] },
12234
12237
  // Java UUID parse — UUID.fromString rejects non-UUID strings
12235
12238
  { method: "fromString", class: "UUID", removes: ["sql_injection", "command_injection", "path_traversal", "code_injection"] },
12236
12239
  // JavaScript numeric coercion (Number/parseInt/parseFloat already covered above; add path_traversal/code_injection)
@@ -13424,8 +13427,11 @@ function matchesSinkPattern(call, pattern, typeHierarchy, language) {
13424
13427
  if (pattern.class === "constructor") {
13425
13428
  return true;
13426
13429
  }
13430
+ const subtypeArgArityOk = !pattern.arg_positions || pattern.arg_positions.length === 0 || pattern.arg_positions.every((pos) => pos < (call.arguments?.length ?? 0));
13427
13431
  if (call.receiver_type && call.receiver_type === pattern.class) {
13432
+ } else if (call.receiver_type && typeHierarchy && subtypeArgArityOk && typeHierarchy.isSubtypeOf(call.receiver_type, pattern.class)) {
13428
13433
  } else if (call.receiver_type_fqn && call.receiver_type_fqn.endsWith("." + pattern.class)) {
13434
+ } else if (call.receiver_type_fqn && typeHierarchy && subtypeArgArityOk && typeHierarchy.isSubtypeOf(call.receiver_type_fqn, pattern.class)) {
13429
13435
  } else if (call.receiver && !receiverMightBeClass(call.receiver, pattern.class)) {
13430
13436
  if (typeHierarchy && typeHierarchy.couldBeType(call.receiver, pattern.class)) {
13431
13437
  return true;
@@ -13980,6 +13986,23 @@ var CodeGraph = class {
13980
13986
  }
13981
13987
  return this._chainsByFromDef;
13982
13988
  }
13989
+ /**
13990
+ * Mirror of chainsByFromDef keyed by chain.to_def. Enables backward
13991
+ * walks from a use's reaching def to earlier defs in the chain
13992
+ * (cognium-dev #238 — DFG-walk sanitizer credit).
13993
+ */
13994
+ _chainsByToDef = null;
13995
+ get chainsByToDef() {
13996
+ if (!this._chainsByToDef) {
13997
+ this._chainsByToDef = /* @__PURE__ */ new Map();
13998
+ for (const chain of this.ir.dfg.chains ?? []) {
13999
+ const arr = this._chainsByToDef.get(chain.to_def) ?? [];
14000
+ arr.push(chain);
14001
+ this._chainsByToDef.set(chain.to_def, arr);
14002
+ }
14003
+ }
14004
+ return this._chainsByToDef;
14005
+ }
13983
14006
  // ---------------------------------------------------------------------------
13984
14007
  // Call indexes
13985
14008
  // ---------------------------------------------------------------------------
@@ -14150,6 +14173,43 @@ var CodeGraph = class {
14150
14173
  }
14151
14174
  };
14152
14175
 
14176
+ // src/analysis/dfg-walk.ts
14177
+ function walkBackwardDefs(startDefId, chainsByToDef, defById, options = {}) {
14178
+ const maxHops = options.maxHops ?? 32;
14179
+ const visited = /* @__PURE__ */ new Set();
14180
+ const lines = /* @__PURE__ */ new Set();
14181
+ let hopCapReached = false;
14182
+ const startDef = defById.get(startDefId);
14183
+ if (!startDef) {
14184
+ return { visited, lines, hopCapReached: false };
14185
+ }
14186
+ visited.add(startDefId);
14187
+ lines.add(startDef.line);
14188
+ const queue = [startDefId];
14189
+ let hops = 0;
14190
+ while (queue.length > 0) {
14191
+ if (hops >= maxHops) {
14192
+ hopCapReached = true;
14193
+ break;
14194
+ }
14195
+ hops++;
14196
+ const currentId = queue.shift();
14197
+ const incoming = chainsByToDef.get(currentId);
14198
+ if (!incoming) continue;
14199
+ for (const chain of incoming) {
14200
+ const fromId = chain.from_def;
14201
+ if (visited.has(fromId)) continue;
14202
+ visited.add(fromId);
14203
+ const fromDef = defById.get(fromId);
14204
+ if (fromDef) {
14205
+ lines.add(fromDef.line);
14206
+ }
14207
+ queue.push(fromId);
14208
+ }
14209
+ }
14210
+ return { visited, lines, hopCapReached };
14211
+ }
14212
+
14153
14213
  // src/analysis/taint-propagation.ts
14154
14214
  function buildSanitizersByLine(sanitizers) {
14155
14215
  const out2 = /* @__PURE__ */ new Map();
@@ -14237,7 +14297,12 @@ function propagateTaint(graphOrDfg, callsOrSources, sourcesOrSinks, sinksOrSanit
14237
14297
  taintInfo.line,
14238
14298
  sink.line,
14239
14299
  sink.type,
14240
- sanitizersByLine
14300
+ sanitizersByLine,
14301
+ {
14302
+ startDefId: use.def_id,
14303
+ chainsByToDef: graph.chainsByToDef,
14304
+ defById
14305
+ }
14241
14306
  );
14242
14307
  if (!isSanitized.sanitized) {
14243
14308
  const source = sources.find((s) => s.line === taintInfo.sourceLine);
@@ -14375,20 +14440,39 @@ var KNOWN_SINK_TYPES = /* @__PURE__ */ new Set([
14375
14440
  "crlf",
14376
14441
  "mass_assignment"
14377
14442
  ]);
14378
- function checkSanitized(_fromLine, toLine, sinkType, sanitizersByLine) {
14379
- const sanitizersAtTarget = sanitizersByLine.get(toLine);
14380
- if (!sanitizersAtTarget || sanitizersAtTarget.length === 0) {
14381
- return { sanitized: false };
14382
- }
14443
+ function checkSanitized(_fromLine, toLine, sinkType, sanitizersByLine, ctx) {
14383
14444
  const isKnownSinkType = KNOWN_SINK_TYPES.has(sinkType);
14384
- for (const san of sanitizersAtTarget) {
14385
- if (isKnownSinkType) {
14386
- if (san.sanitizes.includes(sinkType)) {
14445
+ const sanitizersAtTarget = sanitizersByLine.get(toLine);
14446
+ if (sanitizersAtTarget && sanitizersAtTarget.length > 0) {
14447
+ for (const san of sanitizersAtTarget) {
14448
+ if (isKnownSinkType) {
14449
+ if (san.sanitizes.includes(sinkType)) {
14450
+ return { sanitized: true, sanitizer: san };
14451
+ }
14452
+ } else if (san.sanitizes.length > 0) {
14387
14453
  return { sanitized: true, sanitizer: san };
14388
14454
  }
14389
- } else {
14390
- if (san.sanitizes.length > 0) {
14391
- return { sanitized: true, sanitizer: san };
14455
+ }
14456
+ }
14457
+ if (ctx) {
14458
+ const walk = walkBackwardDefs(
14459
+ ctx.startDefId,
14460
+ ctx.chainsByToDef,
14461
+ ctx.defById,
14462
+ { maxHops: ctx.maxHops ?? 32 }
14463
+ );
14464
+ for (const line of walk.lines) {
14465
+ if (line === toLine) continue;
14466
+ const sansAtLine = sanitizersByLine.get(line);
14467
+ if (!sansAtLine || sansAtLine.length === 0) continue;
14468
+ for (const san of sansAtLine) {
14469
+ if (isKnownSinkType) {
14470
+ if (san.sanitizes.includes(sinkType)) {
14471
+ return { sanitized: true, sanitizer: san };
14472
+ }
14473
+ } else if (san.sanitizes.length > 0) {
14474
+ return { sanitized: true, sanitizer: san };
14475
+ }
14392
14476
  }
14393
14477
  }
14394
14478
  }
@@ -27,6 +27,13 @@ export declare class CodeGraph {
27
27
  get usesByDefId(): Map<number, DFGUse[]>;
28
28
  private _chainsByFromDef;
29
29
  get chainsByFromDef(): Map<number, DFGChain[]>;
30
+ /**
31
+ * Mirror of chainsByFromDef keyed by chain.to_def. Enables backward
32
+ * walks from a use's reaching def to earlier defs in the chain
33
+ * (cognium-dev #238 — DFG-walk sanitizer credit).
34
+ */
35
+ private _chainsByToDef;
36
+ get chainsByToDef(): Map<number, DFGChain[]>;
30
37
  private _callsByLine;
31
38
  get callsByLine(): Map<number, CallInfo[]>;
32
39
  private _callsByMethod;
@@ -1 +1 @@
1
- {"version":3,"file":"code-graph.d.ts","sourceRoot":"","sources":["../../src/graph/code-graph.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EACV,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,cAAc,EACf,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,qBAAa,SAAS;IACpB,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;gBAEV,EAAE,EAAE,QAAQ;IAQxB,OAAO,CAAC,QAAQ,CAAoC;IACpD,IAAI,OAAO,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAQjC;IAED,OAAO,CAAC,WAAW,CAAsC;IACzD,IAAI,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAUtC;IAED,OAAO,CAAC,UAAU,CAAsC;IACxD,IAAI,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAUrC;IAED,OAAO,CAAC,WAAW,CAAsC;IACzD,IAAI,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAUtC;IAED,OAAO,CAAC,YAAY,CAAsC;IAC1D,IAAI,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAYvC;IAED,OAAO,CAAC,gBAAgB,CAAwC;IAChE,IAAI,eAAe,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAU7C;IAMD,OAAO,CAAC,YAAY,CAAwC;IAC5D,IAAI,WAAW,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAUzC;IAED,OAAO,CAAC,cAAc,CAAwC;IAC9D,IAAI,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAU3C;IAMD,OAAO,CAAC,cAAc,CAA2E;IACjG,IAAI,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,MAAM,EAAE,UAAU,CAAA;KAAE,CAAC,CAAC,CAY9E;IAED;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,MAAM,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI;IAezE,OAAO,CAAC,iBAAiB,CAA8C;IACvE,IAAI,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAUpD;IAMD,uDAAuD;IACvD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAIlC,uDAAuD;IACvD,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE;IAIlC,2EAA2E;IAC3E,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE;IAIlC,yDAAyD;IACzD,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE;IAIrC,mEAAmE;IACnE,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,EAAE;IAIrC;;;;OAIG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAU/E,OAAO,CAAC,UAAU,CAAsC;IACxD,IAAI,SAAS,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAQrC;IAED;;;;;;;;;;;;OAYG;IACH,UAAU,IAAI,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAa7D;;;;;;OAMG;IACH,sBAAsB,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC;CAiBvD"}
1
+ {"version":3,"file":"code-graph.d.ts","sourceRoot":"","sources":["../../src/graph/code-graph.ts"],"names":[],"mappings":"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"}
@@ -90,6 +90,23 @@ export class CodeGraph {
90
90
  }
91
91
  return this._chainsByFromDef;
92
92
  }
93
+ /**
94
+ * Mirror of chainsByFromDef keyed by chain.to_def. Enables backward
95
+ * walks from a use's reaching def to earlier defs in the chain
96
+ * (cognium-dev #238 — DFG-walk sanitizer credit).
97
+ */
98
+ _chainsByToDef = null;
99
+ get chainsByToDef() {
100
+ if (!this._chainsByToDef) {
101
+ this._chainsByToDef = new Map();
102
+ for (const chain of this.ir.dfg.chains ?? []) {
103
+ const arr = this._chainsByToDef.get(chain.to_def) ?? [];
104
+ arr.push(chain);
105
+ this._chainsByToDef.set(chain.to_def, arr);
106
+ }
107
+ }
108
+ return this._chainsByToDef;
109
+ }
93
110
  // ---------------------------------------------------------------------------
94
111
  // Call indexes
95
112
  // ---------------------------------------------------------------------------
@@ -1 +1 @@
1
- {"version":3,"file":"code-graph.js","sourceRoot":"","sources":["../../src/graph/code-graph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"code-graph.js","sourceRoot":"","sources":["../../src/graph/code-graph.ts"],"names":[],"mappings":"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"}
@@ -124,4 +124,19 @@ export declare class TypeHierarchyResolver {
124
124
  * These are standard JDK types that code often extends/implements
125
125
  */
126
126
  export declare function createWithJdkTypes(): TypeHierarchyResolver;
127
+ /**
128
+ * Pre-registered type hierarchies for widely used third-party libraries.
129
+ *
130
+ * These are strictly additive facts — code that supplies its own IR types
131
+ * for these classes overrides the pre-registered facts via the normal
132
+ * `addFromIR()` path. Purpose: allow sink patterns keyed on a base class /
133
+ * interface (e.g. `HttpClient.execute`) to match subtype receivers
134
+ * (`CloseableHttpClient`, `InternalHttpClient`, etc.) via
135
+ * `TypeHierarchyResolver.isSubtypeOf()`.
136
+ *
137
+ * Currently registered:
138
+ * - Apache HttpClient 4.x (`org.apache.http.*`)
139
+ * - Apache HttpClient 5.x (`org.apache.hc.client5.*`)
140
+ */
141
+ export declare function registerCommonLibraries(resolver: TypeHierarchyResolver): void;
127
142
  //# sourceMappingURL=type-hierarchy.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"type-hierarchy.d.ts","sourceRoot":"","sources":["../../src/resolution/type-hierarchy.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,IAAI,iBAAiB,EAGlC,QAAQ,EACT,MAAM,mBAAmB,CAAC;AAE3B;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,GAAG,WAAW,GAAG,MAAM,CAAC;IACrC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,qBAAa,qBAAqB;IAEhC,OAAO,CAAC,KAAK,CAAoC;IAGjD,OAAO,CAAC,SAAS,CAAuC;IAGxD,OAAO,CAAC,QAAQ,CAAuC;IAGvD,OAAO,CAAC,eAAe,CAAuC;IAG9D,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,UAAU,CAAoC;IAEtD;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAM/C;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,GAAE,MAAM,GAAG,IAAW,GAAG,IAAI;IAsDrF;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAK9C;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IA0B3C;;OAEG;IACH,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE;IAKzD;;OAEG;IACH,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE;IAyCtD;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;IAiB3D;;;OAGG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO;IAerE;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAK3C;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,EAAE;IAQ9C;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAK7C;;;OAGG;IACH,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;IAwB/D;;OAEG;IACH,mBAAmB,IAAI,iBAAiB;IAwBxC;;OAEG;IACH,QAAQ,IAAI;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAUtF;;OAEG;IACH,WAAW,IAAI,QAAQ,EAAE;IAIzB;;OAEG;IACH,KAAK,IAAI,IAAI;IASb;;OAEG;IACH,OAAO,CAAC,eAAe;IAcvB;;OAEG;IACH,OAAO,CAAC,UAAU;IAalB;;OAEG;IACH,OAAO,CAAC,aAAa;IAKrB;;OAEG;IACH,OAAO,CAAC,UAAU;CAInB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,qBAAqB,CAiL1D"}
1
+ {"version":3,"file":"type-hierarchy.d.ts","sourceRoot":"","sources":["../../src/resolution/type-hierarchy.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,IAAI,iBAAiB,EAGlC,QAAQ,EACT,MAAM,mBAAmB,CAAC;AAE3B;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,GAAG,WAAW,GAAG,MAAM,CAAC;IACrC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,qBAAa,qBAAqB;IAEhC,OAAO,CAAC,KAAK,CAAoC;IAGjD,OAAO,CAAC,SAAS,CAAuC;IAGxD,OAAO,CAAC,QAAQ,CAAuC;IAGvD,OAAO,CAAC,eAAe,CAAuC;IAG9D,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,UAAU,CAAoC;IAEtD;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAM/C;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,GAAE,MAAM,GAAG,IAAW,GAAG,IAAI;IAsDrF;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAK9C;;OAEG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IA0B3C;;OAEG;IACH,wBAAwB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE;IAKzD;;OAEG;IACH,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE;IAyCtD;;OAEG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO;IAiB3D;;;OAGG;IACH,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO;IAerE;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAK3C;;OAEG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,QAAQ,EAAE;IAQ9C;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAK7C;;;OAGG;IACH,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;IAwB/D;;OAEG;IACH,mBAAmB,IAAI,iBAAiB;IAwBxC;;OAEG;IACH,QAAQ,IAAI;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE;IAUtF;;OAEG;IACH,WAAW,IAAI,QAAQ,EAAE;IAIzB;;OAEG;IACH,KAAK,IAAI,IAAI;IASb;;OAEG;IACH,OAAO,CAAC,eAAe;IAcvB;;OAEG;IACH,OAAO,CAAC,UAAU;IAalB;;OAEG;IACH,OAAO,CAAC,aAAa;IAKrB;;OAEG;IACH,OAAO,CAAC,UAAU;CAInB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,qBAAqB,CAoL1D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI,CAgJ7E"}
@@ -523,6 +523,165 @@ export function createWithJdkTypes() {
523
523
  for (const type of [...jdbcTypes, ...ioTypes, ...servletTypes]) {
524
524
  resolver.addType(type, 'jdk', type.package);
525
525
  }
526
+ // Add common third-party library hierarchies
527
+ registerCommonLibraries(resolver);
526
528
  return resolver;
527
529
  }
530
+ /**
531
+ * Pre-registered type hierarchies for widely used third-party libraries.
532
+ *
533
+ * These are strictly additive facts — code that supplies its own IR types
534
+ * for these classes overrides the pre-registered facts via the normal
535
+ * `addFromIR()` path. Purpose: allow sink patterns keyed on a base class /
536
+ * interface (e.g. `HttpClient.execute`) to match subtype receivers
537
+ * (`CloseableHttpClient`, `InternalHttpClient`, etc.) via
538
+ * `TypeHierarchyResolver.isSubtypeOf()`.
539
+ *
540
+ * Currently registered:
541
+ * - Apache HttpClient 4.x (`org.apache.http.*`)
542
+ * - Apache HttpClient 5.x (`org.apache.hc.client5.*`)
543
+ */
544
+ export function registerCommonLibraries(resolver) {
545
+ // Apache HttpClient 4.x — org.apache.http.*
546
+ const apacheHttpClient4x = [
547
+ {
548
+ name: 'HttpClient',
549
+ kind: 'interface',
550
+ package: 'org.apache.http.client',
551
+ extends: null,
552
+ implements: [],
553
+ annotations: [],
554
+ methods: [],
555
+ fields: [],
556
+ start_line: 0,
557
+ end_line: 0,
558
+ },
559
+ {
560
+ name: 'AbstractHttpClient',
561
+ kind: 'class',
562
+ package: 'org.apache.http.impl.client',
563
+ extends: null,
564
+ implements: ['org.apache.http.client.HttpClient'],
565
+ annotations: [],
566
+ methods: [],
567
+ fields: [],
568
+ start_line: 0,
569
+ end_line: 0,
570
+ },
571
+ {
572
+ name: 'CloseableHttpClient',
573
+ kind: 'class',
574
+ package: 'org.apache.http.impl.client',
575
+ extends: null,
576
+ implements: ['org.apache.http.client.HttpClient'],
577
+ annotations: [],
578
+ methods: [],
579
+ fields: [],
580
+ start_line: 0,
581
+ end_line: 0,
582
+ },
583
+ {
584
+ name: 'InternalHttpClient',
585
+ kind: 'class',
586
+ package: 'org.apache.http.impl.client',
587
+ extends: 'org.apache.http.impl.client.CloseableHttpClient',
588
+ implements: [],
589
+ annotations: [],
590
+ methods: [],
591
+ fields: [],
592
+ start_line: 0,
593
+ end_line: 0,
594
+ },
595
+ {
596
+ name: 'MinimalHttpClient',
597
+ kind: 'class',
598
+ package: 'org.apache.http.impl.client',
599
+ extends: 'org.apache.http.impl.client.CloseableHttpClient',
600
+ implements: [],
601
+ annotations: [],
602
+ methods: [],
603
+ fields: [],
604
+ start_line: 0,
605
+ end_line: 0,
606
+ },
607
+ {
608
+ name: 'DefaultHttpClient',
609
+ kind: 'class',
610
+ package: 'org.apache.http.impl.client',
611
+ extends: 'org.apache.http.impl.client.AbstractHttpClient',
612
+ implements: [],
613
+ annotations: [],
614
+ methods: [],
615
+ fields: [],
616
+ start_line: 0,
617
+ end_line: 0,
618
+ },
619
+ {
620
+ name: 'SystemDefaultHttpClient',
621
+ kind: 'class',
622
+ package: 'org.apache.http.impl.client',
623
+ extends: 'org.apache.http.impl.client.DefaultHttpClient',
624
+ implements: [],
625
+ annotations: [],
626
+ methods: [],
627
+ fields: [],
628
+ start_line: 0,
629
+ end_line: 0,
630
+ },
631
+ ];
632
+ // Apache HttpClient 5.x — org.apache.hc.client5.*
633
+ const apacheHttpClient5x = [
634
+ {
635
+ name: 'HttpClient',
636
+ kind: 'interface',
637
+ package: 'org.apache.hc.client5.http.classic',
638
+ extends: null,
639
+ implements: [],
640
+ annotations: [],
641
+ methods: [],
642
+ fields: [],
643
+ start_line: 0,
644
+ end_line: 0,
645
+ },
646
+ {
647
+ name: 'CloseableHttpClient',
648
+ kind: 'class',
649
+ package: 'org.apache.hc.client5.http.impl.classic',
650
+ extends: null,
651
+ implements: ['org.apache.hc.client5.http.classic.HttpClient'],
652
+ annotations: [],
653
+ methods: [],
654
+ fields: [],
655
+ start_line: 0,
656
+ end_line: 0,
657
+ },
658
+ {
659
+ name: 'InternalHttpClient',
660
+ kind: 'class',
661
+ package: 'org.apache.hc.client5.http.impl.classic',
662
+ extends: 'org.apache.hc.client5.http.impl.classic.CloseableHttpClient',
663
+ implements: [],
664
+ annotations: [],
665
+ methods: [],
666
+ fields: [],
667
+ start_line: 0,
668
+ end_line: 0,
669
+ },
670
+ {
671
+ name: 'MinimalHttpClient',
672
+ kind: 'class',
673
+ package: 'org.apache.hc.client5.http.impl.classic',
674
+ extends: 'org.apache.hc.client5.http.impl.classic.CloseableHttpClient',
675
+ implements: [],
676
+ annotations: [],
677
+ methods: [],
678
+ fields: [],
679
+ start_line: 0,
680
+ end_line: 0,
681
+ },
682
+ ];
683
+ for (const type of [...apacheHttpClient4x, ...apacheHttpClient5x]) {
684
+ resolver.addType(type, 'common-libraries', type.package);
685
+ }
686
+ }
528
687
  //# sourceMappingURL=type-hierarchy.js.map