From ab1dc3b8048938d679e369185534ccfeaeef034f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ana=20Mar=C3=ADa=20Mart=C3=ADnez=20G=C3=B3mez?= Date: Fri, 17 Jul 2020 14:01:07 +0200 Subject: [PATCH 1/2] Fix rule linter Prevent the linter to raise an exception if `examples` is `None`, as it for example currently happens in: `capa-rules/nursery/hash-data-using-murmur2.yml` We could also remove the `examples` tag in those cases, but the linter shouldn't break in any case. --- scripts/lint.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/scripts/lint.py b/scripts/lint.py index 3a017d0f..ada15a9d 100644 --- a/scripts/lint.py +++ b/scripts/lint.py @@ -136,10 +136,12 @@ class MissingExampleOffset(Lint): def check_rule(self, ctx, rule): if rule.meta.get("scope") in ("function", "basic block"): - for example in rule.meta.get("examples", []): - if example and ":" not in example: - logger.debug("example: %s", example) - return True + examples = rule.meta.get("examples") + if isinstance(examples, list): + for example in examples: + if example and ":" not in example: + logger.debug("example: %s", example) + return True class ExampleFileDNE(Lint): From e744652999287372824f97610d407775a6251415 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ana=20Mar=C3=ADa=20Mart=C3=ADnez=20G=C3=B3mez?= Date: Fri, 17 Jul 2020 13:49:38 +0200 Subject: [PATCH 2/2] Run rules linter in master and PRs Add the rule linter to the CI GitHub action. A similar actions should be added to `capa-rules` as well. --- .github/workflows/tests.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 3427cc0a..20e87422 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -23,3 +23,20 @@ jobs: - name: Lint with black run: black -l 120 --check . + rule_linter: + runs-on: ubuntu-latest + steps: + - name: Checkout capa with rules submodule + uses: actions/checkout@v2 + with: + submodules: true + - name: Set up Python 3.8 + uses: actions/setup-python@v2 + with: + python-version: 3.8 + # We don't need vivisect, so we can install capa using Python3 + - name: Install capa + run: pip install -e . + - name: Run rule linter + run: python scripts/lint.py rules/ +