lua: fix broken build — remove utf8_*_test targets blocking coverage#54
Open
tc-agent wants to merge 2 commits into
Open
lua: fix broken build — remove utf8_*_test targets blocking coverage#54tc-agent wants to merge 2 commits into
tc-agent wants to merge 2 commits into
Conversation
Fuzzing Coverage ReportTested: project
Δ = (after − before) / before, to accommodate that denominators may change. "new" when before is 0; "deleted" when after is 0. |
tc-agent
force-pushed
the
master
branch
3 times, most recently
from
May 10, 2026 07:35
0c732ae to
576129c
Compare
tc-agent
force-pushed
the
lua-fix-coverage-build
branch
from
May 10, 2026 07:35
186e3c0 to
7bc2a28
Compare
tc-agent
force-pushed
the
master
branch
25 times, most recently
from
May 14, 2026 13:17
55041f5 to
da881b1
Compare
tc-agent
force-pushed
the
lua-fix-coverage-build
branch
from
May 16, 2026 15:43
7bc2a28 to
7f34984
Compare
tc-agent
force-pushed
the
master
branch
3 times, most recently
from
May 17, 2026 07:07
c540264 to
b54c0d2
Compare
tc-agent
force-pushed
the
lua-fix-coverage-build
branch
from
May 17, 2026 07:07
7f34984 to
07737c5
Compare
tc-agent
force-pushed
the
master
branch
2 times, most recently
from
May 17, 2026 09:43
1b028e2 to
a7386df
Compare
tc-agent
force-pushed
the
lua-fix-coverage-build
branch
from
May 17, 2026 09:45
07737c5 to
83592ff
Compare
tc-agent
force-pushed
the
master
branch
5 times, most recently
from
May 27, 2026 06:33
6125235 to
e512e7e
Compare
tc-agent
force-pushed
the
lua-fix-coverage-build
branch
from
May 27, 2026 07:53
83592ff to
9995b24
Compare
tc-agent
force-pushed
the
master
branch
5 times, most recently
from
May 27, 2026 16:16
b5fd10c to
712a52f
Compare
tc-agent
force-pushed
the
lua-fix-coverage-build
branch
from
May 28, 2026 01:25
9995b24 to
f8a4b6d
Compare
tc-agent
force-pushed
the
master
branch
2 times, most recently
from
May 28, 2026 02:55
a7587cd to
b952f62
Compare
tc-agent
force-pushed
the
master
branch
4 times, most recently
from
May 28, 2026 18:05
af7f9a7 to
806b281
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Status: advisory stopgap — maintainer decision requested
This restores the long-broken
luacoverage build, but it does so by disabling production fuzzing of 5utf8_*Lua-API targets (see impact section). It directly overlaps @ligurio's in-flight coverage work (#14875 / #14859). It is offered as an optional stopgap; the durable fix is infra-side and tracked on #14859. Please decide whether to take this now or wait for the infra fix — not a unilateral merge request.Summary
Coverage builds for
luahave failed every day since 2026-04-12. Last successful: 2026-04-11. Status feed: https://oss-fuzz-build-logs.storage.googleapis.com/index.html#lua.The coverage runner extracts every
/corpus/<target>.zipbefore invokingcoverage(build_and_run_coverage.py):(echo ... && exit 1)is a subshell, soexit 1does not break the loop — the loop's exit status is the final iteration'sunzipstatus. The corpus set is built fromtargets.list.address(build_lib._get_targets_list, consumed bydownload_corpora_steps). ClusterFuzz backups for many luzer-based targets (added in #14610) are 0-byte, andutf8_offset_testsorts alphabetically last, so the finalunzipfails,&& coverageshort-circuits, and no report is generated.Fix
rm -f $OUT/utf8_*in the address build (the scriptexits earlier forSANITIZER=coverage). This makestorture_testthe alphabetically-last target.Security / production-fuzzing impact (please read)
targets.list.addressis the production libFuzzer+ASan target list — ClusterFuzz fuzzes exactly what is in that$OUT. This change therefore stops OSS-Fuzz from fuzzing the 5utf8_*Lua-API targets (utf8_char/codepoint/codes/len/offset_test— attacker-controlled byte-string parsing) until reverted. Stated explicitly in the inlinebuild.shcomment too.Glob scope confirmed: all 5 matched names are luzer Lua-API wrappers from
tests/lapi/. The C-API tests (tests/capi/) are namedluaL_*,lua_*,torture_test, plus the standalonefuzz_lua; none use theutf8_prefix, sorm -f $OUT/utf8_*cannot catch a C-API target. This matches the production list:sort | awk '$0 > "torture_test"'returns exactly those 5.Why no less-destructive option exists within a project
build.sh:/corpus/; a projectbuild.shcannot write them or repair the 0-byte ones ($OUT/<t>_seed_corpus.zipseeds fuzzing but does not fix the broken cloud backups the coverage runner extracts).unziploop lives in OSS-Fuzz infra, not the project.build.shis which binaries land in$OUT. Renaming instead of deleting was considered but the luzer wrapper scripts have internal name/path coupling that makes an in-build.shrename fragile (riskingcheck_buildfailures) for no gain — renamed targets would still have 0-byte cloud backups.fuzz_luatargets, indefinitely) vs. temporarily pausing 5 luzer targets whose corpora are already not preserved by the broken pruning.Durable fix (out of scope here)
Make the unzip non-fatal in
build_and_run_coverage.py(continue past a bad/corpus/*.zipinstead of letting the loop's last iteration gatecoverage). This also unblocks every other project hit by stale ClusterFuzz pruning (e.g. qemu, broken since 2023-11-13). It belongs in OSS-Fuzz infra and should be tracked under the existing Lua-coverage umbrella issue #14859 (already referenced atbuild.sh:148). This PR is the project-side stopgap only.Coordination with in-flight maintainer work
@ligurio has directly-overlapping active work — please advise whether to take this stopgap or wait:
build.sh:148).Evidence the fix works
targets.list.address(102 entries) — the only entries sorting strictly aftertorture_testare exactly the five removed wrappers:torture_test's backup is valid/non-empty: in the failing build log, Step #6 has notorture_test.zipline — not among the 74cannot find zipfile directoryfailures nor the 12zipfile is emptywarnings.unzip -qis silent only on success, so it extracts with exit 0; after removingutf8_*it is the loop's final iteration, which therefore exits 0 andcoverageruns.Fragility
Alphabetic-tail workaround: any future luzer target sorting after
torture_test(nameu–z) re-breaks coverage until the durable infra fix lands. Stated inline inbuild.sh.Coverage baseline
Harnesses are untouched; the surviving 16 C-API/
fuzz_luatargets keep their existing coverage. New coverage is not measurable until this lands (the failure is in the cloud coverage runner, not locally reproducible). Frozen-at-2026-04-11 Fuzz Introspector snapshot: https://introspector.oss-fuzz.com/project-profile?project=lua.