compiletest has some parsing footguns around revisions #123765
Labels
A-compiletest
Area: The compiletest test runner
A-testsuite
Area: The testsuite used to check the correctness of rustc
C-bug
Category: This is a bug.
P-low
Low priority
T-compiler
Relevant to the compiler team, which will review and decide on the PR/issue.
I've chatted with @jieyouxu and we've come to the conclusion that it's worthwhile to track
compiletest
issues even though we plan on fully migrating toui_test
eventually since that might still take a while.When parsing the
revisions
header / directive,compiletest
naively splits the payload by whitespace leading to the bizarre situation that//@ revisions: foo, bar
gets understood as declaring the two revisionsfoo,
(notice the trailing comma!) andbar
.We should either throw an error (my favored solution) or permit
,
to be valid separator next to whitespace (less desirable in my opinion).If we go with the first approach we should probably go all-in and restrict revision names to the regex
[[:alpha:]_\-][[:alnum:]_\-]*
(*) (ASCII-only or Unicode, shouldn't matter) and we can probably also emit the hint “commas not permitted, use whitespace” if we stumble upon a comma.(*) Restricting the grammar of revision names also helps with portability. Windows is way stricter about file paths than *nix OSes and since
compiletest
generates files of the form<STEM>.<REVISION>.<STDSTREAM>
revisions containing special characters may lead to tests passing locally for a contributor working on a *nix machine but failing on a Windows machine. CI would catch that but still ^^'Similarly,
compiletest
permits whatever garbage you put between[
and]
in//@[...] DIRECTIVE
, even//@[]
is allowed. We should probably restrict the content to be identifier-like, too.The text was updated successfully, but these errors were encountered: