diff --git a/CHANGELOG.md b/CHANGELOG.md index 9baf581f..bfeeb12b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,6 +44,8 @@ - fix: EXTENSIONS_DYNAMIC has inconsistent leading dots @williballenthin #3028 +- fix: render_default always returns empty string @williballenthin #3012 + ### capa Explorer Web ### capa Explorer IDA Pro plugin diff --git a/capa/render/default.py b/capa/render/default.py index ff273b51..283fb5c4 100644 --- a/capa/render/default.py +++ b/capa/render/default.py @@ -13,13 +13,11 @@ # limitations under the License. -import io import collections import urllib.parse import rich import rich.table -import rich.console from rich.console import Console import capa.render.utils as rutils @@ -325,17 +323,15 @@ def render_mbc(doc: rd.ResultDocument, console: Console): console.print(table) -def render_default(doc: rd.ResultDocument): - f = io.StringIO() - console = rich.console.Console() - - render_meta(doc, console) - render_attack(doc, console) - render_maec(doc, console) - render_mbc(doc, console) - render_capabilities(doc, console) - - return f.getvalue() +def render_default(doc: rd.ResultDocument) -> str: + console = Console(highlight=False) + with console.capture() as capture: + render_meta(doc, console) + render_attack(doc, console) + render_maec(doc, console) + render_mbc(doc, console) + render_capabilities(doc, console) + return capture.get() def render(meta, rules: RuleSet, capabilities: MatchResults) -> str: diff --git a/tests/test_render.py b/tests/test_render.py index a7e85901..c931dfea 100644 --- a/tests/test_render.py +++ b/tests/test_render.py @@ -245,3 +245,10 @@ def test_render_vverbose_feature(feature, expected): output = capture.get().strip() assert output == expected + + +def test_render_default_returns_non_empty(pma0101_rd): + output = capa.render.default.render_default(pma0101_rd) + assert output != "" + assert "md5" in output + assert "290934c61de9176ad682ffdd65f0a669" in output