Files
tubestation/third_party/rust/remove_dir_all
Erich Gubler f04e931425 Bug 1973947 - revert removal of remove_dir_all crate a=pascalc
Bug 1959801 removed the `remove_dir_all` crate. However, there was a regression we didn't discover until Firefox 140 reached stable: third-party DLL injection on Windows caused problems for the call sites that had had usages of `remove_dir_all::remove_dir_all` replaced with `std::fs::remove_dir_all`!

DLL injection by third parties were causing these crashes because they incorrectly detour calls to `NtOpenFile`, crashing with Rust's current usage of it in `std::fs::remove_dir_all`. The issue has been reported upstream as [rust#143078], and a mitigation is in place in Rust's Nightly release channel. At time of writing this patch message, the fix is projected to become available in a stable Rust toolchain with version 1.90—roughly 11 weeks away.

[rust#143078]: https://github.com/rust-lang/rust/issues/143078#issue-3181510282

After considering multiple mitigation options, this patch represents the decision of some stakeholders (@gstoll, @dmeehan, @yjuglaret, @gsvelto, @leggert, @ErichDonGubler) to mitigate the issue by directly backing out the patch for bug 1959801. The current plan is to eventually remove `remove_dir_all` again, once Rust 1.90 becomes the minimum supported version for `mozilla-central` (see bugs linked against bug 1973947 for more details), thus guaranteeing that our usage of `std::fs::remove_dir_all` is robust against this issue.

We may or may not engage with third parties to fix DLL injection; it has
not been decided at this time.

Original Revision: https://phabricator.services.mozilla.com/D256027

Differential Revision: https://phabricator.services.mozilla.com/D256040
2025-07-04 06:42:12 +00:00
..

remove_dir_all

Latest Version Docs License

Description

A reliable implementation of remove_dir_all for Windows. For Unix systems re-exports std::fs::remove_dir_all.

extern crate remove_dir_all;

use remove_dir_all::*;

fn main() {
    remove_dir_all("./temp/").unwrap();
}