Skip to content

Adding diagnostic item markers for multiple fs functions and structs - #160489

Merged
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
asder8215:fs_diagnostic_items
Aug 19, 2026
Merged

Adding diagnostic item markers for multiple fs functions and structs#160489
rust-bors[bot] merged 1 commit into
rust-lang:mainfrom
asder8215:fs_diagnostic_items

Conversation

@asder8215

Copy link
Copy Markdown
Contributor

A couple months ago there were a good number of TOCTOU/other filesystem lint issues created by @estebank in the clippy repo such as:

(There are more TOCTOU/filesystem bug lints that could be made aside from the list above, e.g. with symlinks).

I was particularly interested in working on the last issue on file creation followed by setting permissions. However, I don't think I could start working on it without diagnostic items on filesystem functions like fs::set_permissions or fs::create_dir_all. I decided to put diagnostic item attributes on all the filesystem functions and a couple of the structs because they may be useful in creating clippy lints against TOCTOU bugs or other relevant filesystem operation bugs.

@rustbot

rustbot commented Aug 4, 2026

Copy link
Copy Markdown
Collaborator

r? @clarfonthey

rustbot has assigned @clarfonthey.
They will have a look at your PR within the next two weeks and either review your PR or reassign to another reviewer.

Use r? to explicitly pick a reviewer

Why was this reviewer chosen?

The reviewer was selected based on:

  • Owners of files modified in this PR: @ChrisDenton, libs
  • @ChrisDenton, libs expanded to 13 candidates
  • Random selection from 6 candidates

@rustbot rustbot added O-unix Operating system: Unix-like O-wasi Operating system: Wasi, Webassembly System Interface O-wasm Target: WASM (WebAssembly), http://webassembly.org/ O-windows Operating system: Windows S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. T-libs Relevant to the library team, which will review and decide on the PR/issue. labels Aug 4, 2026
@clarfonthey

Copy link
Copy Markdown
Contributor

Sorry for taking a bit to get to this, but this looks fine to me. I assume that the cfg_attr(not(test), …) is because in those cases, std is doubled (compiler std + currently-tested `std) and it messes things up?

@asder8215

Copy link
Copy Markdown
Contributor Author

I assume that the cfg_attr(not(test), …) is because in those cases, std is doubled (compiler std + currently-tested `std) and it messes things up?

I'm not sure why the cfg_attr(not(test), ...), I just took this off how it's done for other filesystem functions/structs (e.g. create_dir is marked with #[cfg_attr(not(test), rustc_diagnostic_item = "fs_create_dir")]). I figured that was the pattern we should follow with adding diagnostic items to fs functions/structs.

@mejrs mejrs left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@rust-bors

rust-bors Bot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

📌 Commit 0e87c76 has been approved by mejrs

It is now in the queue for this repository.

@rust-bors rust-bors Bot added S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. and removed S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. labels Aug 18, 2026
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Aug 18, 2026
…ejrs

Adding diagnostic item markers for multiple fs functions and structs

A couple months ago there were a good number of TOCTOU/other filesystem lint issues created by @estebank in the clippy repo such as:

* [`Path::metdata` after `Path::exists`](rust-lang/rust-clippy#17158)
* [opening multiple files under a directory without using `open_at`](rust-lang/rust-clippy#17156)
* [File deletion followed by file creation](rust-lang/rust-clippy#17153)
* [File path comparison without canonicalizing](rust-lang/rust-clippy#17155)
* [File creation followed by setting permissions](rust-lang/rust-clippy#17154)

(There are more TOCTOU/filesystem bug lints that could be made aside from the list above, e.g. with symlinks).

I was particularly interested in working on the last issue on file creation followed by setting permissions. However, I don't think I could start working on it without diagnostic items on filesystem functions like `fs::set_permissions` or `fs::create_dir_all`. I decided to put diagnostic item attributes on all the filesystem functions and a couple of the structs because they may be useful in creating clippy lints against TOCTOU bugs or other relevant filesystem operation bugs.
rust-bors Bot pushed a commit that referenced this pull request Aug 18, 2026
…uwer

Rollup of 8 pull requests

Successful merges:

 - #154210 (fix: fix the capture behavior of `if let` in closures)
 - #156176 (Initial implementation of `FnPtr` trait)
 - #160767 (Unify E0117 foreign-trait label for ADT/primitive types with existing Slice/Array/Tuple handling)
 - #160489 (Adding diagnostic item markers for multiple fs functions and structs)
 - #161220 (bootstrap: Allow `./x fix --allow-dirty`)
 - #161291 (Rename `ProjectionPredicate` and `TraitPredicate`)
 - #161296 (Enable overflow checks in `rustc_thread_pool`)
 - #161304 (Rename test so it matches the issue)
JonathanBrouwer added a commit to JonathanBrouwer/rust that referenced this pull request Aug 18, 2026
…ejrs

Adding diagnostic item markers for multiple fs functions and structs

A couple months ago there were a good number of TOCTOU/other filesystem lint issues created by @estebank in the clippy repo such as:

* [`Path::metdata` after `Path::exists`](rust-lang/rust-clippy#17158)
* [opening multiple files under a directory without using `open_at`](rust-lang/rust-clippy#17156)
* [File deletion followed by file creation](rust-lang/rust-clippy#17153)
* [File path comparison without canonicalizing](rust-lang/rust-clippy#17155)
* [File creation followed by setting permissions](rust-lang/rust-clippy#17154)

(There are more TOCTOU/filesystem bug lints that could be made aside from the list above, e.g. with symlinks).

I was particularly interested in working on the last issue on file creation followed by setting permissions. However, I don't think I could start working on it without diagnostic items on filesystem functions like `fs::set_permissions` or `fs::create_dir_all`. I decided to put diagnostic item attributes on all the filesystem functions and a couple of the structs because they may be useful in creating clippy lints against TOCTOU bugs or other relevant filesystem operation bugs.
jhpratt added a commit to jhpratt/rust that referenced this pull request Aug 19, 2026
…ejrs

Adding diagnostic item markers for multiple fs functions and structs

A couple months ago there were a good number of TOCTOU/other filesystem lint issues created by @estebank in the clippy repo such as:

* [`Path::metdata` after `Path::exists`](rust-lang/rust-clippy#17158)
* [opening multiple files under a directory without using `open_at`](rust-lang/rust-clippy#17156)
* [File deletion followed by file creation](rust-lang/rust-clippy#17153)
* [File path comparison without canonicalizing](rust-lang/rust-clippy#17155)
* [File creation followed by setting permissions](rust-lang/rust-clippy#17154)

(There are more TOCTOU/filesystem bug lints that could be made aside from the list above, e.g. with symlinks).

I was particularly interested in working on the last issue on file creation followed by setting permissions. However, I don't think I could start working on it without diagnostic items on filesystem functions like `fs::set_permissions` or `fs::create_dir_all`. I decided to put diagnostic item attributes on all the filesystem functions and a couple of the structs because they may be useful in creating clippy lints against TOCTOU bugs or other relevant filesystem operation bugs.
rust-bors Bot pushed a commit that referenced this pull request Aug 19, 2026
Rollup of 18 pull requests

Successful merges:

 - #154210 (fix: fix the capture behavior of `if let` in closures)
 - #156176 (Initial implementation of `FnPtr` trait)
 - #160767 (Unify E0117 foreign-trait label for ADT/primitive types with existing Slice/Array/Tuple handling)
 - #161297 (std: use UNIX's `Instant` and `SystemTime` on Hermit)
 - #160489 (Adding diagnostic item markers for multiple fs functions and structs)
 - #160643 (Require windowed (and exception) for Xtensa ABI)
 - #161088 (suppress projection errors already covered by a trait error)
 - #161114 (Remove fields from TypeKind: Struct, Enum, Union and Tuple)
 - #161115 (Assorted allocator nitpicks)
 - #161220 (bootstrap: Allow `./x fix --allow-dirty`)
 - #161296 (Enable overflow checks in `rustc_thread_pool`)
 - #161298 (remove rustc_error_messages dependency)
 - #161304 (Rename test so it matches the issue)
 - #161309 (`allow(non_camel_case_types)` in `minicore.rs`)
 - #161315 (Relax codgen test variable regex)
 - #161318 (Doc: clarify how `Read::bytes` handling Interrupted errors)
 - #161321 (Update books)
 - #161335 ([compiletest] Use the correct rustc lib directory for query_rustc_output)
@rust-bors
rust-bors Bot merged commit 349a828 into rust-lang:main Aug 19, 2026
13 checks passed
@rustbot rustbot added this to the 1.100.0 milestone Aug 19, 2026
rust-bors Bot pushed a commit that referenced this pull request Aug 19, 2026
Rollup merge of #160489 - asder8215:fs_diagnostic_items, r=mejrs

Adding diagnostic item markers for multiple fs functions and structs

A couple months ago there were a good number of TOCTOU/other filesystem lint issues created by @estebank in the clippy repo such as:

* [`Path::metdata` after `Path::exists`](rust-lang/rust-clippy#17158)
* [opening multiple files under a directory without using `open_at`](rust-lang/rust-clippy#17156)
* [File deletion followed by file creation](rust-lang/rust-clippy#17153)
* [File path comparison without canonicalizing](rust-lang/rust-clippy#17155)
* [File creation followed by setting permissions](rust-lang/rust-clippy#17154)

(There are more TOCTOU/filesystem bug lints that could be made aside from the list above, e.g. with symlinks).

I was particularly interested in working on the last issue on file creation followed by setting permissions. However, I don't think I could start working on it without diagnostic items on filesystem functions like `fs::set_permissions` or `fs::create_dir_all`. I decided to put diagnostic item attributes on all the filesystem functions and a couple of the structs because they may be useful in creating clippy lints against TOCTOU bugs or other relevant filesystem operation bugs.
RalfJung pushed a commit to RalfJung/miri that referenced this pull request Aug 19, 2026
Rollup of 18 pull requests

Successful merges:

 - rust-lang/rust#154210 (fix: fix the capture behavior of `if let` in closures)
 - rust-lang/rust#156176 (Initial implementation of `FnPtr` trait)
 - rust-lang/rust#160767 (Unify E0117 foreign-trait label for ADT/primitive types with existing Slice/Array/Tuple handling)
 - rust-lang/rust#161297 (std: use UNIX's `Instant` and `SystemTime` on Hermit)
 - rust-lang/rust#160489 (Adding diagnostic item markers for multiple fs functions and structs)
 - rust-lang/rust#160643 (Require windowed (and exception) for Xtensa ABI)
 - rust-lang/rust#161088 (suppress projection errors already covered by a trait error)
 - rust-lang/rust#161114 (Remove fields from TypeKind: Struct, Enum, Union and Tuple)
 - rust-lang/rust#161115 (Assorted allocator nitpicks)
 - rust-lang/rust#161220 (bootstrap: Allow `./x fix --allow-dirty`)
 - rust-lang/rust#161296 (Enable overflow checks in `rustc_thread_pool`)
 - rust-lang/rust#161298 (remove rustc_error_messages dependency)
 - rust-lang/rust#161304 (Rename test so it matches the issue)
 - rust-lang/rust#161309 (`allow(non_camel_case_types)` in `minicore.rs`)
 - rust-lang/rust#161315 (Relax codgen test variable regex)
 - rust-lang/rust#161318 (Doc: clarify how `Read::bytes` handling Interrupted errors)
 - rust-lang/rust#161321 (Update books)
 - rust-lang/rust#161335 ([compiletest] Use the correct rustc lib directory for query_rustc_output)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

O-unix Operating system: Unix-like O-wasi Operating system: Wasi, Webassembly System Interface O-wasm Target: WASM (WebAssembly), http://webassembly.org/ O-windows Operating system: Windows S-waiting-on-bors Status: Waiting on bors to run and complete tests. Bors will change the label on completion. T-libs Relevant to the library team, which will review and decide on the PR/issue.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants