Repository navigation
Releases: sahebbiswas/cgull
Releases Β· sahebbiswas/cgull
Release list
v0.11.7
What's Changed
Fixes
- Fix raw preprocessor diagnostics corrupting CLI output by @sahebbiswas in #410
Other changes
- Fix #401: make AST preprocessing a core runtime capability by @sahebbiswas in #408
- Fix CGULL-042 loop-carried reads in fallback analysis by @sahebbiswas in #409
- Fix CGULL-042 noise from defensive declaration initialization by @sahebbiswas in #411
- Fix CGULL-007 bounds proofs for ordered short-circuit conditions by @sahebbiswas in #412
- CGULL-007: model explicit buffer capacity contracts by @sahebbiswas in #413
- CGULL-007: prove relational loop induction bounds by @sahebbiswas in #414
- Propagate direct-call summaries across translation units by @sahebbiswas in #415
- Fix Juliet oracle attribution for split flows and badSink by @sahebbiswas in #416
- Infer promoted integer expression types at conversion sinks by @sahebbiswas in #417
- Prepare 0.11.7 release changelog by @sahebbiswas in #418
Full Changelog: v0.11.0...v0.11.7
v0.11.0
What's Changed
Other changes
- Add Translation-Unit scan mode CLI and config toggle by @sahebbiswas in #215
- Translation-Unit mode: preprocessed-unit caching by @sahebbiswas in #216
- Add TU mode test fixtures and provenance regression tests by @sahebbiswas in #226
- Implement control flow graph (CFG) representation and forward data-flow analysis by @sahebbiswas in #227
- Add interprocedural analysis milestone documentation and define scope by @sahebbiswas in #228
- Expand Juliet benchmark coverage to include additional CWEs and enhance reporting metrics by @sahebbiswas in #233
- Refactor unit tests for CGULL-013 Naked Control Flow Statements Rule by @sahebbiswas in #234
- Consolidate packaging metadata into pyproject.toml and remove setup.py by @sahebbiswas in #235
- Enhance heap allocation capacity tracking and update tests for CGULL-007 by @sahebbiswas in #236
- Propagate allocation nullness from caller to callee by @sahebbiswas in #237
- Refactor Format String Rule to reduce false positives and enhance by @sahebbiswas in #238
- Add CONTRIBUTING.md documenting rule-authoring and PR verification pattern by @sahebbiswas in #256
- Add CONTRIBUTING.md and issue templates by @sahebbiswas in #257
- doc: update rule count references to 46 in release notes and readme by @sahebbiswas in #258
- Add CHANGELOG.md and document version guidelines by @sahebbiswas in #259
- Add Dependabot configuration for pip dependencies and GitHub Actions by @sahebbiswas in #260
- Add pre-commit hooks configuration and README documentation by @sahebbiswas in #263
- Bump actions/setup-python from 5 to 7 by @dependabot[bot] in #262
- Bump actions/checkout from 4 to 7 by @dependabot[bot] in #261
- Add composite GitHub Action wrapping cgull scan by @sahebbiswas in #264
- Fix Windows Python 3.10 CI hangs by @sahebbiswas in #265
- Specify the interprocedural fact and query contract by @sahebbiswas in #266
- Fix Juliet rule-specific oracle expectations by @sahebbiswas in #267
- Join Windows process-pool manager thread after interrupt by @sahebbiswas in #268
- Add interprocedural regression corpus and baseline metrics by @sahebbiswas in #269
- Emit explicit call events from CFG construction by @sahebbiswas in #270
- Add embedded trust-boundary semantic models by @sahebbiswas in #277
- Backfill behavioral corpus coverage for all rules by @sahebbiswas in #278
- Track external provenance and validation properties through CFG by @sahebbiswas in #279
- Propagate trust-boundary facts across direct calls by @sahebbiswas in #280
- Add CGULL-047 trust-boundary validation rule by @sahebbiswas in #281
- Add embedded-security semantic model profile by @sahebbiswas in #282
- Add embedded trust-boundary regression corpus and quality gate by @sahebbiswas in #283
- docs: sync behavioral corpus coverage gate by @sahebbiswas in #284
- test: improve coverage for low-covered rules by @sahebbiswas in #285
- Report Juliet benchmark results by rule first by @sahebbiswas in #287
- Add dedicated CGULL-002 format-string precision fixture by @sahebbiswas in #288
- CGULL-007: detect negative constant array indices by @sahebbiswas in #289
- Document corpus coverage CI ratchet by @sahebbiswas in #290
- Expand Juliet CWE coverage beyond current baseline by @sahebbiswas in #291
- Implement safe-fix apply mode for cgull scan by @sahebbiswas in #292
- Populate SARIF fixes for safe auto-fix replacements by @sahebbiswas in #293
- Build deterministic translation-unit call graph by @sahebbiswas in #309
- Introduce shared per-TU analysis sessions by @sahebbiswas in #310
- Replace summary iteration with SCC fixed-point engine by @sahebbiswas in #311
- Add declarative call effects and conservative model integration by @sahebbiswas in #312
- Propagate provenance and format-literal facts through calls by @sahebbiswas in #313
- Migrate CGULL-002 to interprocedural value facts by @sahebbiswas in #314
- Separate unconditional and data-dependent CGULL-001 policy by @sahebbiswas in #315
- Propagate buffer extents and size constraints through calls by @sahebbiswas in #316
- Optimize large-file AST fallback extraction by @sahebbiswas in #317
- Migrate CGULL-030 to interprocedural command provenance by @sahebbiswas in #319
- Migrate CGULL-044 to interprocedural size facts by @sahebbiswas in #320
- Propagate output initialization effects through function summaries by @sahebbiswas in #321
- Propagate allocation ownership, escape, and free effects by @sahebbiswas in #322
- Add interprocedural evidence and degraded-analysis diagnostics by @sahebbiswas in #323
- Add interprocedural release gates by @sahebbiswas in #333
- Credit existing overflow rules for CWE-121/122 benchmarks by @sahebbiswas in #334
- Add canonical upstream Juliet benchmark lane by @sahebbiswas in #335
- Restructure documentation into a professional knowledgebase by @sahebbiswas in #336
- Add data-flow buffer overflow detection for classic copy APIs by @sahebbiswas in #337
- Diagnose Juliet oracle attribution symmetry by @sahebbiswas in #338
- Extend CGULL-006 with external-input taint tracking by @sahebbiswas in #340
- Fix upstream Juliet split-file testcase attribution by @sahebbiswas in #341
- Recognize constant-safe divisors in CGULL-034 by @sahebbiswas in #342
- Improve CGULL-036 cleanup-path precision by @sahebbiswas in #343
- Establish Juliet rule coverage matrix by @sahebbiswas in #344
- Document CGULL-002 Juliet provenance audit by @sahebbiswas in #346
- Propagate value facts through output effects and split-file groups by @sahebbiswas in #353
- Add CGULL-049 explicit integer narrowing-cast detection by @sahebbiswas in #354
- Extend CGULL-049 to implicit integer narrowing conversions by @sahebbiswas in #355
- Add CFG-backed integer range provenance for CGULL-049 by @sahebbiswas in #356
- Extend CGULL-049 to unsafe signed/unsigned conversions by @sahebbiswas in #357
- Detect unexpected sign extension in CGULL-049 by @sahebbiswas in #358
- Add scan throughput and source-line telemetry by @sahebbiswas in #368
- Add pointer origin and accessible-range fact domain by @sahebbiswas in #377
- Detect definite pointer bounds violations with CGULL-050 by @sahebbiswas in #378
- Track validated pointer access intervals (CGULL-051) and release 0.10.0 by @sahebbiswas in #379
- Prove safe pointer accesses from enclosing-range guards by @sahebbiswas in #380
- Resolve declaration-only signatures for CGULL-049 by @sahebbiswas in #381
- Add standard-library callable signature fallbacks by @sahebbiswas in https://github.com/sahebbiswas/cgull/pull/...
Release v0.9.8
What's Changed
- Make realloc semantics explicit in shared allocation model by @sahebbiswas in #126
- Fix FormatStringRule (CGULL-002) function list and argument position matching by @sahebbiswas in #128
- feat: Add CGULL-039 Improper chroot() Jail rule by @sahebbiswas in #127
- Doc rule limitation and improve strcpy alias size checks by @sahebbiswas in #129
- Fix AST line number drift under multi-line pcpp macros by @sahebbiswas in #145
- Fix Tier 2 fallback preprocessor conditional resolution by @sahebbiswas in #146
- Fix persistent realloc records replay masking double-free and UAF by @sahebbiswas in #156
- Fix multi-realloc RHS binding and input extraction by @sahebbiswas in #157
- feat: Add ConfigProfile internal flag-map schema by @sahebbiswas in #158
- Add ConditionalFlagCollector for preprocessor flag discovery by @sahebbiswas in #159
- Config-space scanning: baseline + one-at-a-time variant generation by @sahebbiswas in #160
- Add header (.h) seed file ingestion for config-space scanning by @sahebbiswas in #161
- Config-space scanning: directory-of-headers auto-discovery by @sahebbiswas in #162
- Add JSON config profile seed format support by @sahebbiswas in #163
- Config-space scanning: compile_commands.json ingestion by @sahebbiswas in #164
- feat: Config-space scanning and condition-tagged findings by @sahebbiswas in #166
- Config-space scanning: seed macro injection into preprocessor tiers by @sahebbiswas in #167
- Add pairwise and bounded-exhaustive config-space expansion strategies by @sahebbiswas in #168
- Surface reachable_under in report output across JSON, SARIF, Markdown, and Terminal text formats by @sahebbiswas in #169
- Config-space scanning: seed source precedence and validation diagnostics by @sahebbiswas in #170
- Translation-unit mode: include-path resolution and config by @sahebbiswas in #171
- Fix multi-line statement line drift for CFG dereference findings by @sahebbiswas in #176
- Detect unused local variables (CGULL-041) and support block scoping by @sahebbiswas in #183
- Add CGULL-042 DeadStoresRule for dead store detection by @sahebbiswas in #184
- Detect variable shadowing across nested scopes (MISRA C:2012 Rule 5.3) by @sahebbiswas in #185
- Implement struct/union field-size table (F1) and bump version to 0.9.0 by @sahebbiswas in #186
- Implement expression-to-struct-type resolution (F2) by @sahebbiswas in #187
- Extend CGULL-007 (array index bounds) to struct members by @sahebbiswas in #188
- Extend strcpy destination size resolution to struct members by @sahebbiswas in #189
- Add CGULL-044 size-aware memcpy/memmove/memset struct-member and array overflow rule by @sahebbiswas in #190
- Add cross-cutting variant regression matrix test suite (F6) by @sahebbiswas in #191
- Add structured trace logging to support triage of hangs and scan failures by @sahebbiswas in #194
- Fix AttributeError in CGULL-040 for compound assignments by @sahebbiswas in #195
- Translation-unit mode: recursive #include expansion with cycle/guard detection by @sahebbiswas in #196
- Add tests for TU cross-file line provenance tracking by @sahebbiswas in #197
- TU Mode provenance mapping for AST parser and CFG builder by @sahebbiswas in #198
- feat(rules): Add MissingInclusionGuardRule (CGULL-045) by @sahebbiswas in #199
- Add PointerSubtractionSizeRule (CGULL-046) for CWE-469 by @sahebbiswas in #200
- feat(engine): deduplicate header findings across translation units with --no-dedup-headers flag by @sahebbiswas in #201
- UnsafeSensitiveMemoryClearingRule.scan_line generated malformed auto_fix_replacement strings by @sahebbiswas in #209
- Establish NIST Juliet benchmark for C-GULL by @sahebbiswas in #210
- Use extract_balanced_parens for regex extractions feeding fix replacements by @sahebbiswas in #211
- Refactor oversized rule modules into per-category subpackages by @sahebbiswas in #212
- Remove stale flake8 dependency from dev extras by @sahebbiswas in #213
- Enhance extract_balanced_parens and argument splitting by @sahebbiswas in #214
Full Changelog: rel-v-0-8-28...rel-v-0-9-8
Release v0.8.28
What's Changed
- Add CGULL-027 (Double Free) Rule by @sahebbiswas in #38
- Restrict unsafe autofix suggestions and add FixType metadata by @sahebbiswas in #39
- Expose Parser/Analysis Status and Scan Completeness by @sahebbiswas in #57
- Fix CGULL-024 hardcoded-secret regex to match sized array declarations by @sahebbiswas in #58
- Fix CGULL-002 FormatStringRule scanning raw line_content by @sahebbiswas in #59
- Make parallel and sequential scans semantically identical by @sahebbiswas in #60
- Make Severity Filtering Consistent Across Findings and Summaries by @sahebbiswas in #61
- Report scan errors explicitly instead of silently skipping failed files by @sahebbiswas in #62
- Add NoInsecureRandRule (CGULL-028) for insecure PRNG detection by @sahebbiswas in #63
- Prune ignored directory trees in os.walk when no negation matches by @sahebbiswas in #64
- Fix CGULL-007 false positives on initialized array declarations by @sahebbiswas in #69
- Add SizeofOnPointerRule (CGULL-029) by @sahebbiswas in #70
- Fix CGULL-007 variable-index array bounds checking by @sahebbiswas in #71
- Handle KeyboardInterrupt gracefully instead of printing a raw Python traceback by @sahebbiswas in #74
- Fix CGULL-013 false positive on preprocessor-split conditions by @sahebbiswas in #75
- feat(rules): Add CommandInjectionRule (CGULL-030) to detect system/popen vulnerabilities by @sahebbiswas in #76
- Add TOML Project Configuration File Support and Inline Suppressions by @sahebbiswas in #77
- Expand CGULL-030 Command Injection rule to detect PATH-searching exec variants by @sahebbiswas in #78
- Enforce Meaningful Test Coverage in CI by @sahebbiswas in #79
- Establish Stable Versioning and Output Schema Versioning by @sahebbiswas in #80
- Expose -j/--jobs CLI option and validate jobs count by @sahebbiswas in #81
- Add regression test for parallel worker crash handling by @sahebbiswas in #82
- Fix SARIF fullDescription to use static rule description by @sahebbiswas in #83
- Add Weak/Broken Cryptographic Primitives rule (CGULL-031) by @sahebbiswas in #84
- Downgrade strcpy() finding severity when source literal is provably bounded by @sahebbiswas in #85
- feat: add rule CGULL-033 for signed/unsigned comparison and loop bound mismatch by @sahebbiswas in #86
- Verify existing Double-Free rule (CGULL-027) by @sahebbiswas in #87
- Fix CGULL-013 false positives on preprocessor-split conditions with repeated keywords by @sahebbiswas in #90
- Fix CGULL-007 false positive on standard unsigned typedefs by @sahebbiswas in #91
- Add CGULL-034 Division or Modulo by Zero rule by @sahebbiswas in #92
- Add CGULL-032 Realloc-Overwrite Memory Leak Rule by @sahebbiswas in #93
- Add TOCTOU File Access Rule (CGULL-035) by @sahebbiswas in #94
- feat: Add detection for insecure temporary file functions (mktemp/tmpnam/tempnam) by @sahebbiswas in #95
- Add ruleset drift warning and stamp rules_applied_count in baseline mode by @sahebbiswas in #96
- Add --fail-on threshold flag to CLI by @sahebbiswas in #97
- Log exception summary to stderr on rule/worker failures by @sahebbiswas in #98
- Surface per-file AST parse tier and add --warn-on-fallback option by @sahebbiswas in #99
- Fix CGULL-006 to detect general CWE-190 integer overflow by @sahebbiswas in #106
- Fix ArrayIndexOutOfBoundsRule declared size resolution through pointer aliasing by @sahebbiswas in #107
- Fix NULL pointer dereference detection for direct assignments and inverted checks by @sahebbiswas in #108
- docs: update CLI help and README rules by @sahebbiswas in #116
- Model goto and labeled control flow in the CFG by @sahebbiswas in #117
- Preserve allocation state across control-flow joins by @sahebbiswas in #118
- Add general CWE-401 Memory Leak rule (CGULL-036) by @sahebbiswas in #120
- Add CWE-170 strncpy null-termination detection by @sahebbiswas in #119
- feat: add ReturnStackVariable rule to detect escaping local addresses (CGULL-038) by @sahebbiswas in #122
- Add alias-aware lifetime tracking for UAF and double-free by @sahebbiswas in #123
- Add intra-file interprocedural memory effect summaries by @sahebbiswas in #124
- Add CFG/data-flow coverage for conditional expressions and short-circuit logic by @sahebbiswas in #125
Full Changelog: rel-v-0-6-0...rel-v-0-8-28
Release v0.6.0
C-GULL 0.6.0 Release Notes
Welcome to the initial public release of C-GULL (Code Guardian for Unchecked Logic & Leaks)!
C-GULL is a lightweight, modular C source code static security analyzer designed to identify common memory vulnerabilities, buffer overflows, format string flaws, timing side-channel patterns, and MISRA-C compliance guidelines.
π Key Features in Initial Release
- β‘ Dual Analysis Engine:
- Lightweight Regex Pattern Matching: Fast first-pass scanning for banned API calls, format strings, and unsafe casts.
- AST & CFG-Assisted Structural Analysis: Structural and control-flow aware pattern checks for unchecked
mallocreturns, missing pointer NULL checks, and use-after-free, powered bypycparserandpcpp.
- π‘οΈ 25 Security Audit Rules: Comprehensive rule coverage spanning memory safety, cryptography, control flow, arithmetic, and code quality.
- π Inline Suppression: Silence specific findings using inline comments (e.g.,
// cgull-ignore: CGULL-001). - βοΈ Parallel Scanning: Multi-core scanning support for large codebases (
-j/--jobs). - π Baseline / Diff Mode: CI enforcement for "no new issues" on an existing codebase (
--baselineand--update-baseline). - π Multi-Format Reporting: JSON, SARIF 2.1.0, Markdown, and colored terminal outputs.
- π« .cgullignore Support: Easily exclude vendor libraries, third-party dependencies, or test mock files using gitignore glob patterns.
- π§© Extensible Architecture: Easily add custom regex or AST rules using the object-oriented Python class interface.
π¦ Installation
pip install cgull
# For best AST analysis:
pip install "cgull[ast]"Check out the README for full documentation, CLI usage, and extension examples!
What's Changed
- Expand CI platform and Python version coverage by @sahebbiswas in #18
- Align Package Metadata With Project Maturity by @sahebbiswas in #19
- Fix .cgullignore negation and directory traversal semantics by @sahebbiswas in #20
- Make pycparser AST the Authoritative Structural Representation by @sahebbiswas in #21
- Use AST and Type Semantics as Primary Signals for Rules CGULL-005, 008, 009, 011 by @sahebbiswas in #22
- Rewrite Memory-Safety Rules Around Dataflow Facts by @sahebbiswas in #24
- Build Security Rule Behavioral Corpus for C-GULL by @sahebbiswas in #25
- Validate SARIF Output Against the SARIF Schema by @sahebbiswas in #26
- Add rule CGULL-026 for unchecked snprintf() return values by @sahebbiswas in #27
- Introduce CFG and Basic Dataflow Analysis by @sahebbiswas in #28
- Harden C Parsing and Fallback Behavior by @sahebbiswas in #30
- Improve Sensitive-Comparison and Secret-Handling Precision by @sahebbiswas in #31
- Fix Naked Control Flow false positives on preprocessor directives & multiline conditions by @sahebbiswas in #35
- Fix AttributeError when parsing variadic function parameters (EllipsisParam) by @sahebbiswas in #36
- Add CLI progress indicator during codebase scanning by @sahebbiswas in #37
Full Changelog: https://github.com/sahebbiswas/cgull/commits/rel-v-0-6-0