Commit Graph

6085 Commits

Author SHA1 Message Date
Willi Ballenthin
ac69d73de8 tests: add negative substring feature test fixture 2026-04-28 19:49:20 +02:00
Willi Ballenthin
8a4717a3ef tests: remove orphaned fixture file entries and add lint
Remove 24 file entries from fixture manifests that were defined in
`files` but never referenced by any `features` entry (dead code).
Add a test that catches unreferenced file entries going forward.
2026-04-28 19:49:13 +02:00
Willi Ballenthin
766d5550ba tests: remove symtab tag and better describe fixtures for alternative names 2026-04-28 15:13:18 +02:00
Willi Ballenthin
7d9ed58f1d tests: fix reference to pma 01-01 RD 2026-04-23 18:31:21 +03:00
Willi Ballenthin
e294e69f25 tests: inline more test logic 2026-04-23 18:07:42 +03:00
Willi Ballenthin
b4cf20be7d fix lints 2026-04-23 18:07:28 +03:00
Willi Ballenthin
f127ce1bfa tests: ida: better handle stale databases and concurrent access 2026-04-23 18:07:28 +03:00
Willi Ballenthin
10ccc4a54b tests: cleanup test failures 2026-04-23 18:07:28 +03:00
Willi Ballenthin
8219124d1d changelog 2026-04-23 18:07:28 +03:00
Willi Ballenthin
72fab63e0b tests: cleanup tests and fixtures 2026-04-23 18:07:28 +03:00
Willi Ballenthin
44509a3cb0 tests: consolidate feature test fixtures and runners 2026-04-23 18:07:28 +03:00
Willi Ballenthin
0c9c1532a9 tests: add data-driven fixtures for ELF features 2026-04-23 18:07:28 +03:00
Willi Ballenthin
cacc3c88df tests: migrate to data-driven fixtures for .NET features
Moves FEATURE_PRESENCE_TESTS_DOTNET and FEATURE_COUNT_TESTS_DOTNET
from hardcoded Python lists in tests/fixtures.py into the shared
tests/fixtures/feature-presence.json data file, tagged with "dotnet".
2026-04-23 18:07:28 +03:00
Willi Ballenthin
50d9207e3f tests: migrate to data-driven fixtures for feature counts 2026-04-23 18:07:28 +03:00
Willi Ballenthin
019126e972 tests: migrate to data-driven fixtures for feature presence
wip
2026-04-23 18:07:28 +03:00
Willi Ballenthin
d0a4331680 rules: introduce helper to parse features from parts 2026-04-23 18:07:28 +03:00
Willi Ballenthin
b9f830619d update submodules 2026-04-23 18:04:10 +03:00
Willi Ballenthin
e745fa6aab style: ruff format changed files 2026-04-23 18:04:10 +03:00
Willi Ballenthin
a834c4c0a7 fix: clean up CHANGELOG bug fixes formatting 2026-04-23 18:04:10 +03:00
Willi Ballenthin
7484d3fc16 fix: loader.py reads entire file for magic byte check
Closes #3029
2026-04-23 18:04:10 +03:00
Willi Ballenthin
9954d99402 fix: freeze/__init__.py: logically impossible condition
Closes #3030
2026-04-23 18:04:10 +03:00
Willi Ballenthin
aa9f09db89 fix: render_default always returns empty string
Closes #3012
2026-04-23 18:04:10 +03:00
Willi Ballenthin
a5082beed0 fix: remove unused gzip import in test_helpers.py 2026-04-23 18:04:10 +03:00
Willi Ballenthin
f6f3380fd3 fix: EXTENSIONS_DYNAMIC has inconsistent leading dots
Closes #3028
2026-04-23 18:04:10 +03:00
Willi Ballenthin
6431be2c42 fix: rules/__init__.py: duplicate bytes_features line
Closes #3027
2026-04-23 18:04:10 +03:00
Willi Ballenthin
62e6af31f8 fix: dotnetfile.py: missing import for capa.features.extractors.common
Closes #3026
2026-04-23 18:04:10 +03:00
Willi Ballenthin
f17629a4eb fix: freeze/__init__.py: NO_ADDRESS < NO_ADDRESS returns True
Closes #3025
2026-04-23 18:04:10 +03:00
Willi Ballenthin
c7d3de8bf8 fix: base_extractor.py: __metaclass__ is Python 2 syntax, ignored in Py3
Closes #3024
2026-04-23 18:04:10 +03:00
Willi Ballenthin
58b7a9fc55 fix: elffile.py: get_base_address returns None instead of NO_ADDRESS
Closes #3023
2026-04-23 18:04:10 +03:00
Willi Ballenthin
8bea7c700e fix: DNTokenOffsetAddress.__eq__ lacks type guard
Closes #3022
2026-04-23 18:04:10 +03:00
Willi Ballenthin
3c61d9956d fix: ProcessAddress.__eq__ and ThreadAddress.__eq__ assert on type
Closes #3021
2026-04-23 18:04:10 +03:00
Willi Ballenthin
a8fafe0d46 fix: optimizer doesn't recurse into And/Or/Some children
Closes #3020
2026-04-23 18:04:10 +03:00
Willi Ballenthin
53158b4712 fix: find_dynamic_limitations_from_cli overwrites instead of OR-ing
Closes #3019
2026-04-23 18:04:10 +03:00
Willi Ballenthin
9289f09f15 fix: load_one_jsonl_from_path: finally block runs on unrelated exceptions
Closes #3018
2026-04-23 18:04:10 +03:00
Willi Ballenthin
8f946778ae fix: extract_os yields duplicate/contradictory OS values
Closes #3017
2026-04-23 18:04:10 +03:00
Willi Ballenthin
527fb397ea fix: vverbose.py: render_call variable assigned but never used
Closes #3016
2026-04-23 18:04:10 +03:00
Willi Ballenthin
d3e2bac803 fix: capabilities/common.py: if va: drops address 0x0
Closes #3015
2026-04-23 18:04:10 +03:00
Willi Ballenthin
0345a15744 fix: _NoAddress.__eq__ unconditionally returns True
Closes #3014
2026-04-23 18:04:10 +03:00
Willi Ballenthin
a07d314a31 fix: elf.py vdso_guess exception handler clobbers symtab_guess
Closes #3013
2026-04-23 18:04:10 +03:00
Willi Ballenthin
dc4d64cb01 vverbose: use capa.helpers.assert_never
typing.assert_never isn't available until py3.11
2026-04-23 16:11:58 +03:00
Willi Ballenthin
f5e3aa4a3b fix: address Pyright diagnostics in vivisect extractors (chunk 8)
- basicblock.py: fix real bug (/ -> // for integer division in get_printable_len); type: ignore for _dis_regctx (dynamically set)
- extractor.py: cast+assert for funcy.cached_property basic_blocks/instructions; type: ignore for get_function_name Address vs int
- file.py: assert pe/IMAGE_NT_HEADERS not None instead of type: ignore
- function.py: cast+assert for funcy.cached_property basic_blocks/instructions; type: ignore for getBranches() base return type
- insn.py: type hint derefs() as Iterator[int]; isinstance guard before derefs calls; import Elf + isinstance assert for parsedbin; cast for f.basic_blocks[0] and bb.instructions; type: ignore for dynamically-injected REG_* constants and getBranches()
2026-04-23 16:11:58 +03:00
Willi Ballenthin
191c889adf fix: remaining import, type annotation, and xfail type issues (chunk 7)
- fixtures.py: add import capa.render.result_document; local import capa.loader in functions
- fixtures.py: fix xfail reason type annotation (None -> str = "")
- main.py: type: ignore for PyInstaller-injected sys._MEIPASS
2026-04-23 16:11:58 +03:00
Willi Ballenthin
89a365fa3d fix: address Optional member access and type mismatch in tests (chunk 6)
- test_binexport_accessors.py: type: ignore on .expression accesses guarded by test assertions
- test_freeze_dynamic.py: assert isinstance DynamicFeatureExtractor before compare_extractors
- test_binja_features.py: type: ignore on binaryninja guarded by skipif decorator
2026-04-23 16:11:58 +03:00
Willi Ballenthin
2b536e2f53 fix: address type override, alias parameter, and Statement.children issues (chunk 5)
- engine.py: type: ignore for children/replace_child hasattr-guarded subclass attrs
- result_document.py: type: ignore for Pydantic analysis field override and alias args
- render/proto/__init__.py: type: ignore on Pydantic alias argument lines
- rules/__init__.py: type: ignore on ensure_feature_valid_for_scopes StringFactory calls
- result_document.py: fix Scope|None by extracting scope var with assert
2026-04-23 16:11:58 +03:00
Willi Ballenthin
96cabbcc6b fix: address reportAttributeAccessIssue and override mismatches (chunk 4)
- dnfile/helpers.py, insn.py: add import dnfile.mdtable; type: ignore dnfile Unknown returns
- dnfile/extractor.py: rename get_basic_blocks param f->fh
- pefile.py: rename f/bb->fh/bbh stub params; type: ignore for pefile OPTIONAL_HEADER stubs
- ghidra/file.py, helpers.py: initialize addr=0 before conditional loop
2026-04-23 16:11:58 +03:00
Willi Ballenthin
b34079208c fix: address reportPossiblyUnbound diagnostics (chunk 3)
- elf.py: fix bug where vdso_guess except handler set symtab_guess=None
- result_document.py: add assert_never after StaticAnalysis/DynamicAnalysis
- binexport2/helpers.py: guard empty operand_expressions with early return
- tests/fixtures.py: restructure kernel32-64.dll_ workaround to single if/else
2026-04-23 16:11:58 +03:00
Willi Ballenthin
ad8ed3b0b3 fix: align base_extractor abstract method parameter names with all concrete implementations 2026-04-23 16:11:58 +03:00
Willi Ballenthin
d16a85bdba fix: add missing explicit submodule imports for Pyright attribute resolution 2026-04-23 16:11:58 +03:00
Willi Ballenthin
25edb58fdd rules: raise InvalidRule instead of asserting 2026-04-23 16:11:58 +03:00
Willi Ballenthin
ab629e9a8a changelog 2026-04-23 16:11:58 +03:00