circle-ir-ai 4.16.1 → 4.16.3
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/CHANGELOG.md +50 -0
- package/package.json +4 -3
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,56 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [4.16.3] - 2026-09-24
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
- **circle-ir 4.9.25 → 4.9.26.** Go/C# precision + recall batch. Not a lockstep tag — one of
|
|
14
|
+
these fixes a bug that shipped in our current pin.
|
|
15
|
+
- **cognium-dev#472 — Go taint no longer leaks to a same-named local in another function.**
|
|
16
|
+
The argument-expression matcher links source to sink by variable name, and its same-method
|
|
17
|
+
gate compared method *names*: it never ran for assignment-shaped sources (`a := os.Args`) and
|
|
18
|
+
could not separate two functions sharing a name (`(*A).ServeHTTP` / `(*C).ServeHTTP`). So a
|
|
19
|
+
`b := []byte("x")` in one function inherited the taint of `b, _ := io.ReadAll(r.Body)` in
|
|
20
|
+
another. **This shipped in 4.9.23–4.9.25 via the #459 `r.Body` source — i.e. it is live in our
|
|
21
|
+
4.16.2 pin.** Go now compares the enclosing function by line range; package-level sources stay
|
|
22
|
+
unscoped and closures share their handler's scope. 36 flows removed across 175 Go repos
|
|
23
|
+
(33 re-attributed to the correct source, 3 cross-function sinks dropped).
|
|
24
|
+
- **cognium-dev#343** — Go `bufio.NewScanner`/`NewReader` over the request body: `sc.Text()`,
|
|
25
|
+
`sc.Bytes()`, `br.ReadString(…)` now seed `http_body`.
|
|
26
|
+
- **cognium-dev#339** — C# bare expression-statement sinks with an inline request read
|
|
27
|
+
(`File.Create(Path.Combine(dir, file.FileName));`) were silent while the assigned form fired.
|
|
28
|
+
- **cognium-dev#473** — `initParser` cached a *failed* init forever, so one bad `wasmPath` or a
|
|
29
|
+
transient fetch failure poisoned every later `initParser`/`initAnalyzer` call in the process.
|
|
30
|
+
|
|
31
|
+
**Baseline impact (expected, not regression):** Go counts move in **both** directions. #472
|
|
32
|
+
re-attributes source lines, so a baseline keyed on `sink@source->sink` shows one removal plus one
|
|
33
|
+
addition per affected flow; #343/#339 add genuinely new Go/C# findings. No API or output-shape
|
|
34
|
+
change. Lockfile refreshed; single circle-ir copy verified.
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
## [4.16.2] - 2026-09-24
|
|
38
|
+
|
|
39
|
+
### Changed
|
|
40
|
+
- **circle-ir 4.9.23 → 4.9.25.** Two `analyzeProject` robustness fixes from 4.9.24, both of
|
|
41
|
+
which turned a scannable repo into a hard failure, plus the 4.9.25 lockstep tag (no library
|
|
42
|
+
change). Neither changes detection on ordinary source.
|
|
43
|
+
- **cognium-dev#458 / #420 — a Python starred parameter no longer fails the project analysis
|
|
44
|
+
closed.** `CrossFileResolver` interpolated a method parameter straight into `\b<name>\b`, so
|
|
45
|
+
`*args` / `**kwargs` arrived with their stars, `*` read as a quantifier, the pattern failed to
|
|
46
|
+
compile ("Nothing to repeat") and the whole `analyzeProject` call failed. This is the direct
|
|
47
|
+
cause of a chunk of the `meta.crossFile.error` rows our #482 pass reports — 42 errors on the
|
|
48
|
+
485-repo Cisco sweep of 2026-09-23, with urllib3 / fickling / haystack among the 6-in-95
|
|
49
|
+
upstream measured. Expect that error count to drop on the next sweep. Per-file `analyze()` was
|
|
50
|
+
never affected.
|
|
51
|
+
- **cognium-dev#460 / #421 — minified / bundled files no longer wedge the project scan.**
|
|
52
|
+
`analyze()` now returns a minimal IR for any file whose longest line exceeds 10,000 characters.
|
|
53
|
+
Our own `crossFile` guard (#482) already skipped these at a **tighter** 5,000 characters, so
|
|
54
|
+
this is belt-and-braces for that path — but it also protects every *other* `analyzeProject`
|
|
55
|
+
caller, which our guard never covered. NodeGoat drops ~56 s → ~0.4 s upstream.
|
|
56
|
+
|
|
57
|
+
Lockfile refreshed; single circle-ir copy verified.
|
|
58
|
+
|
|
59
|
+
|
|
10
60
|
## [4.16.1] - 2026-09-23
|
|
11
61
|
|
|
12
62
|
### Fixed
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "circle-ir-ai",
|
|
3
|
-
"version": "4.16.
|
|
3
|
+
"version": "4.16.3",
|
|
4
4
|
"description": "LLM-enhanced SAST analysis built on circle-ir",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.js",
|
|
@@ -69,7 +69,8 @@
|
|
|
69
69
|
"benchmark:csharp": "tsx benchmarks/runners/run-csharp.ts",
|
|
70
70
|
"benchmark:csharp-product": "tsx benchmarks/runners/run-csharp-product.ts",
|
|
71
71
|
"benchmark:csharp-juliet": "tsx benchmarks/runners/run-csharp-juliet.ts",
|
|
72
|
-
"benchmark:vuln-localization": "tsx benchmarks/runners/run-vuln-localization.ts --limit 20"
|
|
72
|
+
"benchmark:vuln-localization": "tsx benchmarks/runners/run-vuln-localization.ts --limit 20",
|
|
73
|
+
"test:coverage": "vitest run --coverage"
|
|
73
74
|
},
|
|
74
75
|
"keywords": [
|
|
75
76
|
"sast",
|
|
@@ -103,7 +104,7 @@
|
|
|
103
104
|
"@ax-llm/ax": "^20.0.0",
|
|
104
105
|
"@cognium/project-profile-detect": "^1.1.0",
|
|
105
106
|
"@mastra/core": "^1.18.0",
|
|
106
|
-
"circle-ir": "4.9.
|
|
107
|
+
"circle-ir": "4.9.26",
|
|
107
108
|
"minimatch": "^10.2.5",
|
|
108
109
|
"p-queue": "^9.1.0"
|
|
109
110
|
},
|