Skip to content

Commit d70db63

Browse files
committed
merge upstream
2 parents 97621e1 + eceae7d commit d70db63

5 files changed

Lines changed: 16 additions & 3 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
-
2727

2828
### Bug Fixes
29+
- fix: freeze: omit null description fields from freeze JSON @SkxOverKill #3100
2930
- fix lots of linter errors identified by pyright @williballenthin #3052
3031
- fix: render_default always returns empty string @williballenthin #3012
3132
- fix: elf.py vdso_guess exception handler clobbers symtab_guess @williballenthin #3013

capa/features/freeze/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ def dumps_static(extractor: StaticFeatureExtractor, reproducible: bool = False)
467467
)
468468
# type checkers are unable to recognise `base_address` as an argument due to alias
469469

470-
return freeze.model_dump_json()
470+
return freeze.model_dump_json(exclude_none=True)
471471

472472

473473
def dumps_dynamic(extractor: DynamicFeatureExtractor, reproducible: bool = False) -> str:
@@ -586,7 +586,7 @@ def dumps_dynamic(extractor: DynamicFeatureExtractor, reproducible: bool = False
586586
)
587587
# type checkers are unable to recognise `base_address` as an argument due to alias
588588

589-
return freeze.model_dump_json()
589+
return freeze.model_dump_json(exclude_none=True)
590590

591591

592592
def loads_static(s: str) -> StaticFeatureExtractor:

tests/test_freeze_dynamic.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,12 @@ def test_freeze_bytes_roundtrip():
153153
compare_extractors(EXTRACTOR, reanimated)
154154

155155

156+
def test_freeze_dump_omits_absent_description():
157+
# features without a description must not serialize as "description": null
158+
# see: https://github.com/mandiant/capa/issues/3100
159+
assert '"description":null' not in capa.features.freeze.dumps_dynamic(EXTRACTOR)
160+
161+
156162
def test_freeze_load_sample(tmpdir):
157163
o = tmpdir.mkdir("capa").join("test.frz")
158164

tests/test_freeze_static.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,12 @@ def test_freeze_bytes_roundtrip():
163163
compare_extractors(EXTRACTOR, reanimated)
164164

165165

166+
def test_freeze_dump_omits_absent_description():
167+
# features without a description must not serialize as "description": null
168+
# see: https://github.com/mandiant/capa/issues/3100
169+
assert '"description":null' not in capa.features.freeze.dumps_static(EXTRACTOR)
170+
171+
166172
def roundtrip_feature(feature):
167173
assert feature == capa.features.freeze.features.feature_from_capa(feature).to_capa()
168174

0 commit comments

Comments
 (0)