From beef253ac7d7d00289ae6428aaa294838ca15b83 Mon Sep 17 00:00:00 2001 From: DavidKorczynski Date: Tue, 3 Jan 2023 22:52:09 +0000 Subject: [PATCH] infra: build: functions: cut corpus directory by last period (#9302) When a corpus zip file is unzipped the destination folder is set to be the directory corresponding to the filepath of the zip file but without ".zip" in the name. This is achieved by `for f in /corpus/*.zip; do unzip -q $f -d ${f%%.*}` where `f%%.*` substitutes the path of `f` based on the first occurrence of ".". This causes some issues with fuzztest fuzzers where a fuzzer name always has a "." in it, e.g. `escaping_test@EscapingTest.EscapingAStringNeverTriggersUndefinedBehavior` Substituting the name in this way causes issues for some coverage builds e.g. https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=53479 This changes it to substiute based on the last occurrence of ".", i.e. just cutting off the ".zip". Alternatively, we could substitute over e.g. ".zip", however, this may cause some issues as a fuzztest fuzzer may have ".zip" in the name. Signed-off-by: David Korczynski Signed-off-by: David Korczynski --- infra/build/functions/build_and_run_coverage.py | 4 ++-- .../functions/test_data/expected_coverage_build_steps.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/infra/build/functions/build_and_run_coverage.py b/infra/build/functions/build_and_run_coverage.py index 8be5da79a..1eefad01e 100755 --- a/infra/build/functions/build_and_run_coverage.py +++ b/infra/build/functions/build_and_run_coverage.py @@ -138,8 +138,8 @@ def get_build_steps( # pylint: disable=too-many-locals, too-many-arguments coverage_env, 'args': [ 'bash', '-c', - ('for f in /corpus/*.zip; do unzip -q $f -d ${f%%.*} || (' - 'echo "Failed to unpack the corpus for $(basename ${f%%.*}). ' + ('for f in /corpus/*.zip; do unzip -q $f -d ${f%.*} || (' + 'echo "Failed to unpack the corpus for $(basename ${f%.*}). ' 'This usually means that corpus backup for a particular fuzz ' 'target does not exist. If a fuzz target was added in the last ' '24 hours, please wait one more day. Otherwise, something is ' diff --git a/infra/build/functions/test_data/expected_coverage_build_steps.json b/infra/build/functions/test_data/expected_coverage_build_steps.json index 000011ff5..9fce94c44 100644 --- a/infra/build/functions/test_data/expected_coverage_build_steps.json +++ b/infra/build/functions/test_data/expected_coverage_build_steps.json @@ -87,7 +87,7 @@ "args": [ "bash", "-c", - "for f in /corpus/*.zip; do unzip -q $f -d ${f%%.*} || (echo \"Failed to unpack the corpus for $(basename ${f%%.*}). This usually means that corpus backup for a particular fuzz target does not exist. If a fuzz target was added in the last 24 hours, please wait one more day. Otherwise, something is wrong with the fuzz target or the infrastructure, and corpus pruning task does not finish successfully.\" && exit 1); done && coverage || (echo \"********************************************************************************\nCode coverage report generation failed.\nTo reproduce, run:\npython infra/helper.py build_image test-project\npython infra/helper.py build_fuzzers --sanitizer coverage test-project\npython infra/helper.py coverage test-project\n********************************************************************************\" && false)" + "for f in /corpus/*.zip; do unzip -q $f -d ${f%.*} || (echo \"Failed to unpack the corpus for $(basename ${f%.*}). This usually means that corpus backup for a particular fuzz target does not exist. If a fuzz target was added in the last 24 hours, please wait one more day. Otherwise, something is wrong with the fuzz target or the infrastructure, and corpus pruning task does not finish successfully.\" && exit 1); done && coverage || (echo \"********************************************************************************\nCode coverage report generation failed.\nTo reproduce, run:\npython infra/helper.py build_image test-project\npython infra/helper.py build_fuzzers --sanitizer coverage test-project\npython infra/helper.py coverage test-project\n********************************************************************************\" && false)" ], "volumes": [ {