$ the-wire · showcase
crates.io rejects NUL bytes in publish, rustup stops proxying to itself
By RepoJournal · Filed · About Rust · Composed from the cited sources · methodology
crates.io now answers a malformed publish with a 400 that names the bad field instead of a 500, while rustup fixes a rust-analyzer lookup that could recurse back into its own proxy.
publish: Reject NUL characters in crate metadata rust-lang/crates.io
Postgres rejects NUL characters in text columns, so a README or free-form Cargo.toml field containing one failed the publish endpoint with a 500 when the value hit the database, most recently from a README holding a literal 'AMQP\x00\x00\t\x01' byte string. publish() now returns a 400 listing every affected field, with readme and readme_file checked before the tarball is processed.
fix(toolchain): don't fall back to external RA redirecting to rustup rust-lang/rustup
rustup's fallback to an external rust-analyzer checked only whether the candidate was named rust-analyzer and compared it with same_file, so a redirector in PATH that bounces back to rustup slipped through. The fallback now refuses that case rather than looping into the proxy.
Rollup of 9 pull requests rust-lang/rust
A nine-PR rollup landed const resumable_breakpoint in core with a std re-export, an invariant lifetime brand for LLVM contexts in cg_llvm, tests for unsoundness involving alias liveness, and a lexer change treating lifetimes as identifiers.
perf(windows): delay-load system DLLs the proxies don't use rust-lang/rustup
rustup-init adds user32, shell32, ole32, oleaut32, crypt32, secur32 and ws2_32 to its Windows delay-load list so proxied cargo and rustc calls stop mapping them at start-up; they still load from System32 on first use, and only linker config changed.
test_utils: Insert email addresses in `UserBuilder::insert()` rust-lang/crates.io
The long tail is test infrastructure: UserBuilder::insert() now creates a verified <username>@example.com address, with_email(), with_email_verified() and without_email() replace hand-edited emails rows, without_github() and with_gh_avatar() retire the with_gh_id(-1) convention and OauthGithubBuilder, and PublishBuilder gains a readme_file() setter.