-
Couldn't load subscription status.
- Fork 13.9k
Uplift clippy::invalid_utf8_in_unchecked lint
#111543
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Uplift clippy::invalid_utf8_in_unchecked lint
#111543
Conversation
|
Some changes occurred in src/tools/clippy cc @rust-lang/clippy Hey! It looks like you've submitted a new PR for the library teams! If this PR contains changes to any Examples of
|
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
366b9e8 to
32ba72f
Compare
This comment has been minimized.
This comment has been minimized.
32ba72f to
642cd38
Compare
This comment has been minimized.
This comment has been minimized.
642cd38 to
734fca1
Compare
|
why is the lint split into two, I would expect that we can keep both lints as a deny by default? r? compiler |
This comment was marked as duplicate.
This comment was marked as duplicate.
possibly but in the case of the checked variants, calling them with invalid data isn't UB, it will just always return an error, so I figured that a warn-by-default for non-UB was appropriate happy to change if T-lang wants to |
|
(I'll review code changes once T-lang approves the uplift) |
|
@rfcbot fcp merge |
|
Team member @tmandry has proposed to merge this. The next step is review by the rest of the tagged team members: No concerns currently listed. Once a majority of reviewers approve (and at most 2 approvals are outstanding), this will enter its final comment period. If you spot a major issue that hasn't been raised at any point in this process, please speak up! cc @rust-lang/lang-advisors: FCP proposed for lang, please feel free to register concerns. |
…cked, r=WaffleLapkin
Uplift `clippy::invalid_utf8_in_unchecked` lint
This PR aims at uplifting the `clippy::invalid_utf8_in_unchecked` lint into two lints.
## `invalid_from_utf8_unchecked`
(deny-by-default)
The `invalid_from_utf8_unchecked` lint checks for calls to `std::str::from_utf8_unchecked` and `std::str::from_utf8_unchecked_mut` with an invalid UTF-8 literal.
### Example
```rust
unsafe {
std::str::from_utf8_unchecked(b"cl\x82ippy");
}
```
### Explanation
Creating such a `str` would result in undefined behavior as per documentation for `std::str::from_utf8_unchecked` and `std::str::from_utf8_unchecked_mut`.
## `invalid_from_utf8`
(warn-by-default)
The `invalid_from_utf8` lint checks for calls to `std::str::from_utf8` and `std::str::from_utf8_mut` with an invalid UTF-8 literal.
### Example
```rust
std::str::from_utf8(b"ru\x82st");
```
### Explanation
Trying to create such a `str` would always return an error as per documentation for `std::str::from_utf8` and `std::str::from_utf8_mut`.
-----
Mostly followed the instructions for uplifting a clippy lint described here: rust-lang#99696 (review)
`@rustbot` label: +I-lang-nominated
r? compiler
-----
For Clippy:
changelog: Moves: Uplifted `clippy::invalid_utf8_in_unchecked` into rustc
…cked, r=WaffleLapkin
Uplift `clippy::invalid_utf8_in_unchecked` lint
This PR aims at uplifting the `clippy::invalid_utf8_in_unchecked` lint into two lints.
## `invalid_from_utf8_unchecked`
(deny-by-default)
The `invalid_from_utf8_unchecked` lint checks for calls to `std::str::from_utf8_unchecked` and `std::str::from_utf8_unchecked_mut` with an invalid UTF-8 literal.
### Example
```rust
unsafe {
std::str::from_utf8_unchecked(b"cl\x82ippy");
}
```
### Explanation
Creating such a `str` would result in undefined behavior as per documentation for `std::str::from_utf8_unchecked` and `std::str::from_utf8_unchecked_mut`.
## `invalid_from_utf8`
(warn-by-default)
The `invalid_from_utf8` lint checks for calls to `std::str::from_utf8` and `std::str::from_utf8_mut` with an invalid UTF-8 literal.
### Example
```rust
std::str::from_utf8(b"ru\x82st");
```
### Explanation
Trying to create such a `str` would always return an error as per documentation for `std::str::from_utf8` and `std::str::from_utf8_mut`.
-----
Mostly followed the instructions for uplifting a clippy lint described here: rust-lang#99696 (review)
``@rustbot`` label: +I-lang-nominated
r? compiler
-----
For Clippy:
changelog: Moves: Uplifted `clippy::invalid_utf8_in_unchecked` into rustc
…cked, r=WaffleLapkin
Uplift `clippy::invalid_utf8_in_unchecked` lint
This PR aims at uplifting the `clippy::invalid_utf8_in_unchecked` lint into two lints.
## `invalid_from_utf8_unchecked`
(deny-by-default)
The `invalid_from_utf8_unchecked` lint checks for calls to `std::str::from_utf8_unchecked` and `std::str::from_utf8_unchecked_mut` with an invalid UTF-8 literal.
### Example
```rust
unsafe {
std::str::from_utf8_unchecked(b"cl\x82ippy");
}
```
### Explanation
Creating such a `str` would result in undefined behavior as per documentation for `std::str::from_utf8_unchecked` and `std::str::from_utf8_unchecked_mut`.
## `invalid_from_utf8`
(warn-by-default)
The `invalid_from_utf8` lint checks for calls to `std::str::from_utf8` and `std::str::from_utf8_mut` with an invalid UTF-8 literal.
### Example
```rust
std::str::from_utf8(b"ru\x82st");
```
### Explanation
Trying to create such a `str` would always return an error as per documentation for `std::str::from_utf8` and `std::str::from_utf8_mut`.
-----
Mostly followed the instructions for uplifting a clippy lint described here: rust-lang#99696 (review)
```@rustbot``` label: +I-lang-nominated
r? compiler
-----
For Clippy:
changelog: Moves: Uplifted `clippy::invalid_utf8_in_unchecked` into rustc
Rollup of 7 pull requests Successful merges: - rust-lang#107916 (fix comment on Allocator trait) - rust-lang#111543 (Uplift `clippy::invalid_utf8_in_unchecked` lint) - rust-lang#111872 (fix: dedup `static_candidates` before report) - rust-lang#111955 (bootstrap: Various Step refactors) - rust-lang#112060 (`EarlyBinder::new` -> `EarlyBinder::bind`) - rust-lang#112064 (Migrate GUI colors test to original CSS color format) - rust-lang#112100 (Don't typecheck recovered method call from suggestion) r? `@ghost` `@rustbot` modify labels: rollup
…cked, r=WaffleLapkin
Uplift `clippy::invalid_utf8_in_unchecked` lint
This PR aims at uplifting the `clippy::invalid_utf8_in_unchecked` lint into two lints.
## `invalid_from_utf8_unchecked`
(deny-by-default)
The `invalid_from_utf8_unchecked` lint checks for calls to `std::str::from_utf8_unchecked` and `std::str::from_utf8_unchecked_mut` with an invalid UTF-8 literal.
### Example
```rust
unsafe {
std::str::from_utf8_unchecked(b"cl\x82ippy");
}
```
### Explanation
Creating such a `str` would result in undefined behavior as per documentation for `std::str::from_utf8_unchecked` and `std::str::from_utf8_unchecked_mut`.
## `invalid_from_utf8`
(warn-by-default)
The `invalid_from_utf8` lint checks for calls to `std::str::from_utf8` and `std::str::from_utf8_mut` with an invalid UTF-8 literal.
### Example
```rust
std::str::from_utf8(b"ru\x82st");
```
### Explanation
Trying to create such a `str` would always return an error as per documentation for `std::str::from_utf8` and `std::str::from_utf8_mut`.
-----
Mostly followed the instructions for uplifting a clippy lint described here: rust-lang#99696 (review)
````@rustbot```` label: +I-lang-nominated
r? compiler
-----
For Clippy:
changelog: Moves: Uplifted `clippy::invalid_utf8_in_unchecked` into rustc
Version 1.72.0 (2023-08-24) ========================== Language -------- - [Replace const eval limit by a lint and add an exponential backoff warning](rust-lang/rust#103877) - [expand: Change how `#![cfg(FALSE)]` behaves on crate root](rust-lang/rust#110141) - [Stabilize inline asm for LoongArch64](rust-lang/rust#111235) - [Uplift `clippy::undropped_manually_drops` lint](rust-lang/rust#111530) - [Uplift `clippy::invalid_utf8_in_unchecked` lint](rust-lang/rust#111543) - [Uplift `clippy::cast_ref_to_mut` lint](rust-lang/rust#111567) - [Uplift `clippy::cmp_nan` lint](rust-lang/rust#111818) - [resolve: Remove artificial import ambiguity errors](rust-lang/rust#112086) - [Don't require associated types with Self: Sized bounds in `dyn Trait` objects](rust-lang/rust#112319) Compiler -------- - [Remember names of `cfg`-ed out items to mention them in diagnostics](rust-lang/rust#109005) - [Support for native WASM exceptions](rust-lang/rust#111322) - [Add support for NetBSD/aarch64-be (big-endian arm64).](rust-lang/rust#111326) - [Write to stdout if `-` is given as output file](rust-lang/rust#111626) - [Force all native libraries to be statically linked when linking a static binary](rust-lang/rust#111698) - [Add Tier 3 support for `loongarch64-unknown-none*`](rust-lang/rust#112310) - [Prevent `.eh_frame` from being emitted for `-C panic=abort`](rust-lang/rust#112403) - [Support 128-bit enum variant in debuginfo codegen](rust-lang/rust#112474) - [compiler: update solaris/illumos to enable tsan support.](rust-lang/rust#112039) Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support. Libraries --------- - [Document memory orderings of `thread::{park, unpark}`](rust-lang/rust#99587) - [io: soften ‘at most one write attempt’ requirement in io::Write::write](rust-lang/rust#107200) - [Specify behavior of HashSet::insert](rust-lang/rust#107619) - [Relax implicit `T: Sized` bounds on `BufReader<T>`, `BufWriter<T>` and `LineWriter<T>`](rust-lang/rust#111074) - [Update runtime guarantee for `select_nth_unstable`](rust-lang/rust#111974) - [Return `Ok` on kill if process has already exited](rust-lang/rust#112594) - [Implement PartialOrd for `Vec`s over different allocators](rust-lang/rust#112632) - [Use 128 bits for TypeId hash](rust-lang/rust#109953) - [Don't drain-on-drop in DrainFilter impls of various collections.](rust-lang/rust#104455) - [Make `{Arc,Rc,Weak}::ptr_eq` ignore pointer metadata](rust-lang/rust#106450) Rustdoc ------- - [Allow whitespace as path separator like double colon](rust-lang/rust#108537) - [Add search result item types after their name](rust-lang/rust#110688) - [Search for slices and arrays by type with `[]`](rust-lang/rust#111958) - [Clean up type unification and "unboxing"](rust-lang/rust#112233) Stabilized APIs --------------- - [`impl<T: Send> Sync for mpsc::Sender<T>`](https://doc.rust-lang.org/nightly/std/sync/mpsc/struct.Sender.html#impl-Sync-for-Sender%3CT%3E) - [`impl TryFrom<&OsStr> for &str`](https://doc.rust-lang.org/nightly/std/primitive.str.html#impl-TryFrom%3C%26'a+OsStr%3E-for-%26'a+str) - [`String::leak`](https://doc.rust-lang.org/nightly/alloc/string/struct.String.html#method.leak) These APIs are now stable in const contexts: - [`CStr::from_bytes_with_nul`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul) - [`CStr::to_bytes`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul) - [`CStr::to_bytes_with_nul`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul) - [`CStr::to_str`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul) Cargo ----- - Enable `-Zdoctest-in-workspace` by default. When running each documentation test, the working directory is set to the root directory of the package the test belongs to. [docs](https://doc.rust-lang.org/nightly/cargo/commands/cargo-test.html#working-directory-of-tests) [openwrt#12221](rust-lang/cargo#12221) [openwrt#12288](rust-lang/cargo#12288) - Add support of the "default" keyword to reset previously set `build.jobs` parallelism back to the default. [openwrt#12222](rust-lang/cargo#12222) Compatibility Notes ------------------- - [Alter `Display` for `Ipv6Addr` for IPv4-compatible addresses](rust-lang/rust#112606) - Cargo changed feature name validation check to a hard error. The warning was added in Rust 1.49. These extended characters aren't allowed on crates.io, so this should only impact users of other registries, or people who don't publish to a registry. [openwrt#12291](rust-lang/cargo#12291) Refreshed patches. Signed-off-by: Tianling Shen <[email protected]>
Version 1.72.0 (2023-08-24) ========================== Language -------- - [Replace const eval limit by a lint and add an exponential backoff warning](rust-lang/rust#103877) - [expand: Change how `#![cfg(FALSE)]` behaves on crate root](rust-lang/rust#110141) - [Stabilize inline asm for LoongArch64](rust-lang/rust#111235) - [Uplift `clippy::undropped_manually_drops` lint](rust-lang/rust#111530) - [Uplift `clippy::invalid_utf8_in_unchecked` lint](rust-lang/rust#111543) - [Uplift `clippy::cast_ref_to_mut` lint](rust-lang/rust#111567) - [Uplift `clippy::cmp_nan` lint](rust-lang/rust#111818) - [resolve: Remove artificial import ambiguity errors](rust-lang/rust#112086) - [Don't require associated types with Self: Sized bounds in `dyn Trait` objects](rust-lang/rust#112319) Compiler -------- - [Remember names of `cfg`-ed out items to mention them in diagnostics](rust-lang/rust#109005) - [Support for native WASM exceptions](rust-lang/rust#111322) - [Add support for NetBSD/aarch64-be (big-endian arm64).](rust-lang/rust#111326) - [Write to stdout if `-` is given as output file](rust-lang/rust#111626) - [Force all native libraries to be statically linked when linking a static binary](rust-lang/rust#111698) - [Add Tier 3 support for `loongarch64-unknown-none*`](rust-lang/rust#112310) - [Prevent `.eh_frame` from being emitted for `-C panic=abort`](rust-lang/rust#112403) - [Support 128-bit enum variant in debuginfo codegen](rust-lang/rust#112474) - [compiler: update solaris/illumos to enable tsan support.](rust-lang/rust#112039) Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support. Libraries --------- - [Document memory orderings of `thread::{park, unpark}`](rust-lang/rust#99587) - [io: soften ‘at most one write attempt’ requirement in io::Write::write](rust-lang/rust#107200) - [Specify behavior of HashSet::insert](rust-lang/rust#107619) - [Relax implicit `T: Sized` bounds on `BufReader<T>`, `BufWriter<T>` and `LineWriter<T>`](rust-lang/rust#111074) - [Update runtime guarantee for `select_nth_unstable`](rust-lang/rust#111974) - [Return `Ok` on kill if process has already exited](rust-lang/rust#112594) - [Implement PartialOrd for `Vec`s over different allocators](rust-lang/rust#112632) - [Use 128 bits for TypeId hash](rust-lang/rust#109953) - [Don't drain-on-drop in DrainFilter impls of various collections.](rust-lang/rust#104455) - [Make `{Arc,Rc,Weak}::ptr_eq` ignore pointer metadata](rust-lang/rust#106450) Rustdoc ------- - [Allow whitespace as path separator like double colon](rust-lang/rust#108537) - [Add search result item types after their name](rust-lang/rust#110688) - [Search for slices and arrays by type with `[]`](rust-lang/rust#111958) - [Clean up type unification and "unboxing"](rust-lang/rust#112233) Stabilized APIs --------------- - [`impl<T: Send> Sync for mpsc::Sender<T>`](https://doc.rust-lang.org/nightly/std/sync/mpsc/struct.Sender.html#impl-Sync-for-Sender%3CT%3E) - [`impl TryFrom<&OsStr> for &str`](https://doc.rust-lang.org/nightly/std/primitive.str.html#impl-TryFrom%3C%26'a+OsStr%3E-for-%26'a+str) - [`String::leak`](https://doc.rust-lang.org/nightly/alloc/string/struct.String.html#method.leak) These APIs are now stable in const contexts: - [`CStr::from_bytes_with_nul`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul) - [`CStr::to_bytes`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul) - [`CStr::to_bytes_with_nul`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul) - [`CStr::to_str`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul) Cargo ----- - Enable `-Zdoctest-in-workspace` by default. When running each documentation test, the working directory is set to the root directory of the package the test belongs to. [docs](https://doc.rust-lang.org/nightly/cargo/commands/cargo-test.html#working-directory-of-tests) [openwrt#12221](rust-lang/cargo#12221) [openwrt#12288](rust-lang/cargo#12288) - Add support of the "default" keyword to reset previously set `build.jobs` parallelism back to the default. [openwrt#12222](rust-lang/cargo#12222) Compatibility Notes ------------------- - [Alter `Display` for `Ipv6Addr` for IPv4-compatible addresses](rust-lang/rust#112606) - Cargo changed feature name validation check to a hard error. The warning was added in Rust 1.49. These extended characters aren't allowed on crates.io, so this should only impact users of other registries, or people who don't publish to a registry. [openwrt#12291](rust-lang/cargo#12291) Refreshed patches. Signed-off-by: Tianling Shen <[email protected]>
Version 1.72.0 (2023-08-24) ========================== Language -------- - [Replace const eval limit by a lint and add an exponential backoff warning](rust-lang/rust#103877) - [expand: Change how `#![cfg(FALSE)]` behaves on crate root](rust-lang/rust#110141) - [Stabilize inline asm for LoongArch64](rust-lang/rust#111235) - [Uplift `clippy::undropped_manually_drops` lint](rust-lang/rust#111530) - [Uplift `clippy::invalid_utf8_in_unchecked` lint](rust-lang/rust#111543) - [Uplift `clippy::cast_ref_to_mut` lint](rust-lang/rust#111567) - [Uplift `clippy::cmp_nan` lint](rust-lang/rust#111818) - [resolve: Remove artificial import ambiguity errors](rust-lang/rust#112086) - [Don't require associated types with Self: Sized bounds in `dyn Trait` objects](rust-lang/rust#112319) Compiler -------- - [Remember names of `cfg`-ed out items to mention them in diagnostics](rust-lang/rust#109005) - [Support for native WASM exceptions](rust-lang/rust#111322) - [Add support for NetBSD/aarch64-be (big-endian arm64).](rust-lang/rust#111326) - [Write to stdout if `-` is given as output file](rust-lang/rust#111626) - [Force all native libraries to be statically linked when linking a static binary](rust-lang/rust#111698) - [Add Tier 3 support for `loongarch64-unknown-none*`](rust-lang/rust#112310) - [Prevent `.eh_frame` from being emitted for `-C panic=abort`](rust-lang/rust#112403) - [Support 128-bit enum variant in debuginfo codegen](rust-lang/rust#112474) - [compiler: update solaris/illumos to enable tsan support.](rust-lang/rust#112039) Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support. Libraries --------- - [Document memory orderings of `thread::{park, unpark}`](rust-lang/rust#99587) - [io: soften ‘at most one write attempt’ requirement in io::Write::write](rust-lang/rust#107200) - [Specify behavior of HashSet::insert](rust-lang/rust#107619) - [Relax implicit `T: Sized` bounds on `BufReader<T>`, `BufWriter<T>` and `LineWriter<T>`](rust-lang/rust#111074) - [Update runtime guarantee for `select_nth_unstable`](rust-lang/rust#111974) - [Return `Ok` on kill if process has already exited](rust-lang/rust#112594) - [Implement PartialOrd for `Vec`s over different allocators](rust-lang/rust#112632) - [Use 128 bits for TypeId hash](rust-lang/rust#109953) - [Don't drain-on-drop in DrainFilter impls of various collections.](rust-lang/rust#104455) - [Make `{Arc,Rc,Weak}::ptr_eq` ignore pointer metadata](rust-lang/rust#106450) Rustdoc ------- - [Allow whitespace as path separator like double colon](rust-lang/rust#108537) - [Add search result item types after their name](rust-lang/rust#110688) - [Search for slices and arrays by type with `[]`](rust-lang/rust#111958) - [Clean up type unification and "unboxing"](rust-lang/rust#112233) Stabilized APIs --------------- - [`impl<T: Send> Sync for mpsc::Sender<T>`](https://doc.rust-lang.org/nightly/std/sync/mpsc/struct.Sender.html#impl-Sync-for-Sender%3CT%3E) - [`impl TryFrom<&OsStr> for &str`](https://doc.rust-lang.org/nightly/std/primitive.str.html#impl-TryFrom%3C%26'a+OsStr%3E-for-%26'a+str) - [`String::leak`](https://doc.rust-lang.org/nightly/alloc/string/struct.String.html#method.leak) These APIs are now stable in const contexts: - [`CStr::from_bytes_with_nul`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul) - [`CStr::to_bytes`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul) - [`CStr::to_bytes_with_nul`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul) - [`CStr::to_str`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul) Cargo ----- - Enable `-Zdoctest-in-workspace` by default. When running each documentation test, the working directory is set to the root directory of the package the test belongs to. [docs](https://doc.rust-lang.org/nightly/cargo/commands/cargo-test.html#working-directory-of-tests) [openwrt#12221](rust-lang/cargo#12221) [openwrt#12288](rust-lang/cargo#12288) - Add support of the "default" keyword to reset previously set `build.jobs` parallelism back to the default. [openwrt#12222](rust-lang/cargo#12222) Compatibility Notes ------------------- - [Alter `Display` for `Ipv6Addr` for IPv4-compatible addresses](rust-lang/rust#112606) - Cargo changed feature name validation check to a hard error. The warning was added in Rust 1.49. These extended characters aren't allowed on crates.io, so this should only impact users of other registries, or people who don't publish to a registry. [openwrt#12291](rust-lang/cargo#12291) Refreshed patches. Signed-off-by: Tianling Shen <[email protected]> (cherry picked from commit 846ee0b) Signed-off-by: Jeffery To <[email protected]>
Version 1.72.0 (2023-08-24) ========================== Language -------- - [Replace const eval limit by a lint and add an exponential backoff warning](rust-lang/rust#103877) - [expand: Change how `#![cfg(FALSE)]` behaves on crate root](rust-lang/rust#110141) - [Stabilize inline asm for LoongArch64](rust-lang/rust#111235) - [Uplift `clippy::undropped_manually_drops` lint](rust-lang/rust#111530) - [Uplift `clippy::invalid_utf8_in_unchecked` lint](rust-lang/rust#111543) - [Uplift `clippy::cast_ref_to_mut` lint](rust-lang/rust#111567) - [Uplift `clippy::cmp_nan` lint](rust-lang/rust#111818) - [resolve: Remove artificial import ambiguity errors](rust-lang/rust#112086) - [Don't require associated types with Self: Sized bounds in `dyn Trait` objects](rust-lang/rust#112319) Compiler -------- - [Remember names of `cfg`-ed out items to mention them in diagnostics](rust-lang/rust#109005) - [Support for native WASM exceptions](rust-lang/rust#111322) - [Add support for NetBSD/aarch64-be (big-endian arm64).](rust-lang/rust#111326) - [Write to stdout if `-` is given as output file](rust-lang/rust#111626) - [Force all native libraries to be statically linked when linking a static binary](rust-lang/rust#111698) - [Add Tier 3 support for `loongarch64-unknown-none*`](rust-lang/rust#112310) - [Prevent `.eh_frame` from being emitted for `-C panic=abort`](rust-lang/rust#112403) - [Support 128-bit enum variant in debuginfo codegen](rust-lang/rust#112474) - [compiler: update solaris/illumos to enable tsan support.](rust-lang/rust#112039) Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support. Libraries --------- - [Document memory orderings of `thread::{park, unpark}`](rust-lang/rust#99587) - [io: soften ‘at most one write attempt’ requirement in io::Write::write](rust-lang/rust#107200) - [Specify behavior of HashSet::insert](rust-lang/rust#107619) - [Relax implicit `T: Sized` bounds on `BufReader<T>`, `BufWriter<T>` and `LineWriter<T>`](rust-lang/rust#111074) - [Update runtime guarantee for `select_nth_unstable`](rust-lang/rust#111974) - [Return `Ok` on kill if process has already exited](rust-lang/rust#112594) - [Implement PartialOrd for `Vec`s over different allocators](rust-lang/rust#112632) - [Use 128 bits for TypeId hash](rust-lang/rust#109953) - [Don't drain-on-drop in DrainFilter impls of various collections.](rust-lang/rust#104455) - [Make `{Arc,Rc,Weak}::ptr_eq` ignore pointer metadata](rust-lang/rust#106450) Rustdoc ------- - [Allow whitespace as path separator like double colon](rust-lang/rust#108537) - [Add search result item types after their name](rust-lang/rust#110688) - [Search for slices and arrays by type with `[]`](rust-lang/rust#111958) - [Clean up type unification and "unboxing"](rust-lang/rust#112233) Stabilized APIs --------------- - [`impl<T: Send> Sync for mpsc::Sender<T>`](https://doc.rust-lang.org/nightly/std/sync/mpsc/struct.Sender.html#impl-Sync-for-Sender%3CT%3E) - [`impl TryFrom<&OsStr> for &str`](https://doc.rust-lang.org/nightly/std/primitive.str.html#impl-TryFrom%3C%26'a+OsStr%3E-for-%26'a+str) - [`String::leak`](https://doc.rust-lang.org/nightly/alloc/string/struct.String.html#method.leak) These APIs are now stable in const contexts: - [`CStr::from_bytes_with_nul`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul) - [`CStr::to_bytes`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul) - [`CStr::to_bytes_with_nul`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul) - [`CStr::to_str`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul) Cargo ----- - Enable `-Zdoctest-in-workspace` by default. When running each documentation test, the working directory is set to the root directory of the package the test belongs to. [docs](https://doc.rust-lang.org/nightly/cargo/commands/cargo-test.html#working-directory-of-tests) [#12221](rust-lang/cargo#12221) [#12288](rust-lang/cargo#12288) - Add support of the "default" keyword to reset previously set `build.jobs` parallelism back to the default. [#12222](rust-lang/cargo#12222) Compatibility Notes ------------------- - [Alter `Display` for `Ipv6Addr` for IPv4-compatible addresses](rust-lang/rust#112606) - Cargo changed feature name validation check to a hard error. The warning was added in Rust 1.49. These extended characters aren't allowed on crates.io, so this should only impact users of other registries, or people who don't publish to a registry. [#12291](rust-lang/cargo#12291) Refreshed patches. Signed-off-by: Tianling Shen <[email protected]> (cherry picked from commit 846ee0b) Signed-off-by: Jeffery To <[email protected]>
Pkgsrc changes: * Adjust patches and cargo checksums to new versions. Upstream changes: Version 1.72.0 (2023-08-24) ========================== Language -------- - [Replace const eval limit by a lint and add an exponential backoff warning] (rust-lang/rust#103877) - [expand: Change how `#![cfg(FALSE)]` behaves on crate root] (rust-lang/rust#110141) - [Stabilize inline asm for LoongArch64] (rust-lang/rust#111235) - [Uplift `clippy::undropped_manually_drops` lint] (rust-lang/rust#111530) - [Uplift `clippy::invalid_utf8_in_unchecked` lint] (rust-lang/rust#111543) - [Uplift `clippy::cast_ref_to_mut` lint] (rust-lang/rust#111567) - [Uplift `clippy::cmp_nan` lint] (rust-lang/rust#111818) - [resolve: Remove artificial import ambiguity errors] (rust-lang/rust#112086) - [Don't require associated types with Self: Sized bounds in `dyn Trait` objects] (rust-lang/rust#112319) Compiler -------- - [Remember names of `cfg`-ed out items to mention them in diagnostics] (rust-lang/rust#109005) - [Support for native WASM exceptions] (rust-lang/rust#111322) - [Add support for NetBSD/aarch64-be (big-endian arm64).] (rust-lang/rust#111326) - [Write to stdout if `-` is given as output file] (rust-lang/rust#111626) - [Force all native libraries to be statically linked when linking a static binary] (rust-lang/rust#111698) - [Add Tier 3 support for `loongarch64-unknown-none*`] (rust-lang/rust#112310) - [Prevent `.eh_frame` from being emitted for `-C panic=abort`] (rust-lang/rust#112403) - [Support 128-bit enum variant in debuginfo codegen] (rust-lang/rust#112474) - [compiler: update solaris/illumos to enable tsan support.] (rust-lang/rust#112039) Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support. Libraries --------- - [Document memory orderings of `thread::{park, unpark}`] (rust-lang/rust#99587) - [io: soften â<80><98>at most one write attemptâ<80><99> requirement in io::Write::write] (rust-lang/rust#107200) - [Specify behavior of HashSet::insert] (rust-lang/rust#107619) - [Relax implicit `T: Sized` bounds on `BufReader<T>`, `BufWriter<T>` and `LineWriter<T>`] (rust-lang/rust#111074) - [Update runtime guarantee for `select_nth_unstable`] (rust-lang/rust#111974) - [Return `Ok` on kill if process has already exited] (rust-lang/rust#112594) - [Implement PartialOrd for `Vec`s over different allocators] (rust-lang/rust#112632) - [Use 128 bits for TypeId hash] (rust-lang/rust#109953) - [Don't drain-on-drop in DrainFilter impls of various collections.] (rust-lang/rust#104455) - [Make `{Arc,Rc,Weak}::ptr_eq` ignore pointer metadata] (rust-lang/rust#106450) Rustdoc ------- - [Allow whitespace as path separator like double colon] (rust-lang/rust#108537) - [Add search result item types after their name] (rust-lang/rust#110688) - [Search for slices and arrays by type with `[]`] (rust-lang/rust#111958) - [Clean up type unification and "unboxing"] (rust-lang/rust#112233) Stabilized APIs --------------- - [`impl<T: Send> Sync for mpsc::Sender<T>`] (https://doc.rust-lang.org/nightly/std/sync/mpsc/struct.Sender.html#impl-Sync-for-Sender%3CT%3E) - [`impl TryFrom<&OsStr> for &str`] (https://doc.rust-lang.org/nightly/std/primitive.str.html#impl-TryFrom%3C%26'a+OsStr%3E-for-%26'a+str) - [`String::leak`] (https://doc.rust-lang.org/nightly/alloc/string/struct.String.html#method.leak) These APIs are now stable in const contexts: - [`CStr::from_bytes_with_nul`] (https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul) - [`CStr::to_bytes`] (https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul) - [`CStr::to_bytes_with_nul`] (https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul) - [`CStr::to_str`] (https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul) Cargo ----- - Enable `-Zdoctest-in-workspace` by default. When running each documentation test, the working directory is set to the root directory of the package the test belongs to. [docs](https://doc.rust-lang.org/nightly/cargo/commands/cargo-test.html#working-directory-of-tests) [#12221](rust-lang/cargo#12221) [#12288](rust-lang/cargo#12288) - Add support of the "default" keyword to reset previously set `build.jobs` parallelism back to the default. [#12222](rust-lang/cargo#12222) Compatibility Notes ------------------- - [Alter `Display` for `Ipv6Addr` for IPv4-compatible addresses] (rust-lang/rust#112606) - Cargo changed feature name validation check to a hard error. The warning was added in Rust 1.49. These extended characters aren't allowed on crates.io, so this should only impact users of other registries, or people who don't publish to a registry. [#12291](rust-lang/cargo#12291)
Version 1.72.0 (2023-08-24) ========================== Language -------- - [Replace const eval limit by a lint and add an exponential backoff warning](rust-lang/rust#103877) - [expand: Change how `#![cfg(FALSE)]` behaves on crate root](rust-lang/rust#110141) - [Stabilize inline asm for LoongArch64](rust-lang/rust#111235) - [Uplift `clippy::undropped_manually_drops` lint](rust-lang/rust#111530) - [Uplift `clippy::invalid_utf8_in_unchecked` lint](rust-lang/rust#111543) - [Uplift `clippy::cast_ref_to_mut` lint](rust-lang/rust#111567) - [Uplift `clippy::cmp_nan` lint](rust-lang/rust#111818) - [resolve: Remove artificial import ambiguity errors](rust-lang/rust#112086) - [Don't require associated types with Self: Sized bounds in `dyn Trait` objects](rust-lang/rust#112319) Compiler -------- - [Remember names of `cfg`-ed out items to mention them in diagnostics](rust-lang/rust#109005) - [Support for native WASM exceptions](rust-lang/rust#111322) - [Add support for NetBSD/aarch64-be (big-endian arm64).](rust-lang/rust#111326) - [Write to stdout if `-` is given as output file](rust-lang/rust#111626) - [Force all native libraries to be statically linked when linking a static binary](rust-lang/rust#111698) - [Add Tier 3 support for `loongarch64-unknown-none*`](rust-lang/rust#112310) - [Prevent `.eh_frame` from being emitted for `-C panic=abort`](rust-lang/rust#112403) - [Support 128-bit enum variant in debuginfo codegen](rust-lang/rust#112474) - [compiler: update solaris/illumos to enable tsan support.](rust-lang/rust#112039) Refer to Rust's [platform support page][platform-support-doc] for more information on Rust's tiered platform support. Libraries --------- - [Document memory orderings of `thread::{park, unpark}`](rust-lang/rust#99587) - [io: soften ‘at most one write attempt’ requirement in io::Write::write](rust-lang/rust#107200) - [Specify behavior of HashSet::insert](rust-lang/rust#107619) - [Relax implicit `T: Sized` bounds on `BufReader<T>`, `BufWriter<T>` and `LineWriter<T>`](rust-lang/rust#111074) - [Update runtime guarantee for `select_nth_unstable`](rust-lang/rust#111974) - [Return `Ok` on kill if process has already exited](rust-lang/rust#112594) - [Implement PartialOrd for `Vec`s over different allocators](rust-lang/rust#112632) - [Use 128 bits for TypeId hash](rust-lang/rust#109953) - [Don't drain-on-drop in DrainFilter impls of various collections.](rust-lang/rust#104455) - [Make `{Arc,Rc,Weak}::ptr_eq` ignore pointer metadata](rust-lang/rust#106450) Rustdoc ------- - [Allow whitespace as path separator like double colon](rust-lang/rust#108537) - [Add search result item types after their name](rust-lang/rust#110688) - [Search for slices and arrays by type with `[]`](rust-lang/rust#111958) - [Clean up type unification and "unboxing"](rust-lang/rust#112233) Stabilized APIs --------------- - [`impl<T: Send> Sync for mpsc::Sender<T>`](https://doc.rust-lang.org/nightly/std/sync/mpsc/struct.Sender.html#impl-Sync-for-Sender%3CT%3E) - [`impl TryFrom<&OsStr> for &str`](https://doc.rust-lang.org/nightly/std/primitive.str.html#impl-TryFrom%3C%26'a+OsStr%3E-for-%26'a+str) - [`String::leak`](https://doc.rust-lang.org/nightly/alloc/string/struct.String.html#method.leak) These APIs are now stable in const contexts: - [`CStr::from_bytes_with_nul`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul) - [`CStr::to_bytes`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul) - [`CStr::to_bytes_with_nul`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul) - [`CStr::to_str`](https://doc.rust-lang.org/nightly/std/ffi/struct.CStr.html#method.from_bytes_with_nul) Cargo ----- - Enable `-Zdoctest-in-workspace` by default. When running each documentation test, the working directory is set to the root directory of the package the test belongs to. [docs](https://doc.rust-lang.org/nightly/cargo/commands/cargo-test.html#working-directory-of-tests) [openwrt#12221](rust-lang/cargo#12221) [openwrt#12288](rust-lang/cargo#12288) - Add support of the "default" keyword to reset previously set `build.jobs` parallelism back to the default. [openwrt#12222](rust-lang/cargo#12222) Compatibility Notes ------------------- - [Alter `Display` for `Ipv6Addr` for IPv4-compatible addresses](rust-lang/rust#112606) - Cargo changed feature name validation check to a hard error. The warning was added in Rust 1.49. These extended characters aren't allowed on crates.io, so this should only impact users of other registries, or people who don't publish to a registry. [openwrt#12291](rust-lang/cargo#12291) Refreshed patches. Signed-off-by: Tianling Shen <[email protected]>
… r=fee1-dead Uplift `clippy::invalid_null_ptr_usage` lint as `invalid_null_arguments` This PR aims at uplifting the `clippy::invalid_null_ptr_usage` lint into rustc, this is similar to the [`clippy::invalid_utf8_in_unchecked` uplift](rust-lang#111543) a few months ago, in the sense that those two lints lint on invalid parameter(s), here a null pointer where it is unexpected and UB to pass one. *For context: GitHub Search reveals that just for `slice::from_raw_parts{_mut}` [~20 invalid usages](hhttps://github.com/search?q=lang%3Arust+%2Fslice%3A%3Afrom_raw_parts%28_mut%29%3F%5C%28ptr%3A%3Anull%2F+NOT+path%3A%2F%5Eclippy_lints%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Erust%5C%2Fsrc%5C%2Ftools%5C%2Fclippy%5C%2Fclippy_lints%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Esrc%5C%2Ftools%5C%2Fclippy%5C%2Fclippy_lints%5C%2Fsrc%5C%2F%2F&type=code) with `ptr::null` and an additional [4 invalid usages](https://github.com/search?q=lang%3Arust+%2Fslice%3A%3Afrom_raw_parts%5C%280%28%5C%29%7C+as%29%2F+NOT+path%3A%2F%5Eclippy_lints%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Erust%5C%2Fsrc%5C%2Ftools%5C%2Fclippy%5C%2Fclippy_lints%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Esrc%5C%2Ftools%5C%2Fclippy%5C%2Fclippy_lints%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Eutils%5C%2Ftinystr%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Eutils%5C%2Fzerovec%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Eprovider%5C%2Fcore%5C%2Fsrc%5C%2F%2F&type=code) with `0 as *const ...`-ish casts.* ----- ## `invalid_null_arguments` (deny-by-default) The `invalid_null_arguments` lint checks for invalid usage of null pointers. ### Example ```rust // Undefined behavior unsafe { std::slice::from_raw_parts(ptr::null(), 1); } ``` Produces: ``` error: calling this function with a null pointer is Undefined Behavior, even if the result of the function is unused --> $DIR/invalid_null_args.rs:21:23 | LL | let _: &[usize] = std::slice::from_raw_parts(ptr::null_mut(), 0); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^---------------^^^^ | | | null pointer originates from here | = help: for more information, visit <https://doc.rust-lang.org/std/ptr/index.html> and <https://doc.rust-lang.org/reference/behavior-considered-undefined.html> ``` ### Explanation Calling methods whose safety invariants requires non-null pointer with a null pointer is undefined behavior. ----- The lint use a list of functions to know which functions and arguments to checks, this could be improved in the future with a rustc attribute, or maybe even with a `#[diagnostic]` attribute. This PR also includes some small refactoring to avoid some ambiguities in naming, those can be done in another PR is desired. `@rustbot` label: +I-lang-nominated r? compiler
Uplift `clippy::invalid_null_ptr_usage` lint as `invalid_null_arguments` This PR aims at uplifting the `clippy::invalid_null_ptr_usage` lint into rustc, this is similar to the [`clippy::invalid_utf8_in_unchecked` uplift](rust-lang/rust#111543) a few months ago, in the sense that those two lints lint on invalid parameter(s), here a null pointer where it is unexpected and UB to pass one. *For context: GitHub Search reveals that just for `slice::from_raw_parts{_mut}` [~20 invalid usages](hhttps://github.com/search?q=lang%3Arust+%2Fslice%3A%3Afrom_raw_parts%28_mut%29%3F%5C%28ptr%3A%3Anull%2F+NOT+path%3A%2F%5Eclippy_lints%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Erust%5C%2Fsrc%5C%2Ftools%5C%2Fclippy%5C%2Fclippy_lints%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Esrc%5C%2Ftools%5C%2Fclippy%5C%2Fclippy_lints%5C%2Fsrc%5C%2F%2F&type=code) with `ptr::null` and an additional [4 invalid usages](https://github.com/search?q=lang%3Arust+%2Fslice%3A%3Afrom_raw_parts%5C%280%28%5C%29%7C+as%29%2F+NOT+path%3A%2F%5Eclippy_lints%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Erust%5C%2Fsrc%5C%2Ftools%5C%2Fclippy%5C%2Fclippy_lints%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Esrc%5C%2Ftools%5C%2Fclippy%5C%2Fclippy_lints%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Eutils%5C%2Ftinystr%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Eutils%5C%2Fzerovec%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Eprovider%5C%2Fcore%5C%2Fsrc%5C%2F%2F&type=code) with `0 as *const ...`-ish casts.* ----- ## `invalid_null_arguments` (deny-by-default) The `invalid_null_arguments` lint checks for invalid usage of null pointers. ### Example ```rust // Undefined behavior unsafe { std::slice::from_raw_parts(ptr::null(), 1); } ``` Produces: ``` error: calling this function with a null pointer is Undefined Behavior, even if the result of the function is unused --> $DIR/invalid_null_args.rs:21:23 | LL | let _: &[usize] = std::slice::from_raw_parts(ptr::null_mut(), 0); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^---------------^^^^ | | | null pointer originates from here | = help: for more information, visit <https://doc.rust-lang.org/std/ptr/index.html> and <https://doc.rust-lang.org/reference/behavior-considered-undefined.html> ``` ### Explanation Calling methods whose safety invariants requires non-null pointer with a null pointer is undefined behavior. ----- The lint use a list of functions to know which functions and arguments to checks, this could be improved in the future with a rustc attribute, or maybe even with a `#[diagnostic]` attribute. This PR also includes some small refactoring to avoid some ambiguities in naming, those can be done in another PR is desired. `@rustbot` label: +I-lang-nominated r? compiler
Uplift `clippy::invalid_null_ptr_usage` lint as `invalid_null_arguments` This PR aims at uplifting the `clippy::invalid_null_ptr_usage` lint into rustc, this is similar to the [`clippy::invalid_utf8_in_unchecked` uplift](rust-lang/rust#111543) a few months ago, in the sense that those two lints lint on invalid parameter(s), here a null pointer where it is unexpected and UB to pass one. *For context: GitHub Search reveals that just for `slice::from_raw_parts{_mut}` [~20 invalid usages](hhttps://github.com/search?q=lang%3Arust+%2Fslice%3A%3Afrom_raw_parts%28_mut%29%3F%5C%28ptr%3A%3Anull%2F+NOT+path%3A%2F%5Eclippy_lints%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Erust%5C%2Fsrc%5C%2Ftools%5C%2Fclippy%5C%2Fclippy_lints%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Esrc%5C%2Ftools%5C%2Fclippy%5C%2Fclippy_lints%5C%2Fsrc%5C%2F%2F&type=code) with `ptr::null` and an additional [4 invalid usages](https://github.com/search?q=lang%3Arust+%2Fslice%3A%3Afrom_raw_parts%5C%280%28%5C%29%7C+as%29%2F+NOT+path%3A%2F%5Eclippy_lints%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Erust%5C%2Fsrc%5C%2Ftools%5C%2Fclippy%5C%2Fclippy_lints%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Esrc%5C%2Ftools%5C%2Fclippy%5C%2Fclippy_lints%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Eutils%5C%2Ftinystr%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Eutils%5C%2Fzerovec%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Eprovider%5C%2Fcore%5C%2Fsrc%5C%2F%2F&type=code) with `0 as *const ...`-ish casts.* ----- ## `invalid_null_arguments` (deny-by-default) The `invalid_null_arguments` lint checks for invalid usage of null pointers. ### Example ```rust // Undefined behavior unsafe { std::slice::from_raw_parts(ptr::null(), 1); } ``` Produces: ``` error: calling this function with a null pointer is Undefined Behavior, even if the result of the function is unused --> $DIR/invalid_null_args.rs:21:23 | LL | let _: &[usize] = std::slice::from_raw_parts(ptr::null_mut(), 0); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^---------------^^^^ | | | null pointer originates from here | = help: for more information, visit <https://doc.rust-lang.org/std/ptr/index.html> and <https://doc.rust-lang.org/reference/behavior-considered-undefined.html> ``` ### Explanation Calling methods whose safety invariants requires non-null pointer with a null pointer is undefined behavior. ----- The lint use a list of functions to know which functions and arguments to checks, this could be improved in the future with a rustc attribute, or maybe even with a `#[diagnostic]` attribute. This PR also includes some small refactoring to avoid some ambiguities in naming, those can be done in another PR is desired. `@rustbot` label: +I-lang-nominated r? compiler
Uplift `clippy::invalid_null_ptr_usage` lint as `invalid_null_arguments` This PR aims at uplifting the `clippy::invalid_null_ptr_usage` lint into rustc, this is similar to the [`clippy::invalid_utf8_in_unchecked` uplift](rust-lang/rust#111543) a few months ago, in the sense that those two lints lint on invalid parameter(s), here a null pointer where it is unexpected and UB to pass one. *For context: GitHub Search reveals that just for `slice::from_raw_parts{_mut}` [~20 invalid usages](hhttps://github.com/search?q=lang%3Arust+%2Fslice%3A%3Afrom_raw_parts%28_mut%29%3F%5C%28ptr%3A%3Anull%2F+NOT+path%3A%2F%5Eclippy_lints%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Erust%5C%2Fsrc%5C%2Ftools%5C%2Fclippy%5C%2Fclippy_lints%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Esrc%5C%2Ftools%5C%2Fclippy%5C%2Fclippy_lints%5C%2Fsrc%5C%2F%2F&type=code) with `ptr::null` and an additional [4 invalid usages](https://github.com/search?q=lang%3Arust+%2Fslice%3A%3Afrom_raw_parts%5C%280%28%5C%29%7C+as%29%2F+NOT+path%3A%2F%5Eclippy_lints%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Erust%5C%2Fsrc%5C%2Ftools%5C%2Fclippy%5C%2Fclippy_lints%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Esrc%5C%2Ftools%5C%2Fclippy%5C%2Fclippy_lints%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Eutils%5C%2Ftinystr%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Eutils%5C%2Fzerovec%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Eprovider%5C%2Fcore%5C%2Fsrc%5C%2F%2F&type=code) with `0 as *const ...`-ish casts.* ----- ## `invalid_null_arguments` (deny-by-default) The `invalid_null_arguments` lint checks for invalid usage of null pointers. ### Example ```rust // Undefined behavior unsafe { std::slice::from_raw_parts(ptr::null(), 1); } ``` Produces: ``` error: calling this function with a null pointer is Undefined Behavior, even if the result of the function is unused --> $DIR/invalid_null_args.rs:21:23 | LL | let _: &[usize] = std::slice::from_raw_parts(ptr::null_mut(), 0); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^---------------^^^^ | | | null pointer originates from here | = help: for more information, visit <https://doc.rust-lang.org/std/ptr/index.html> and <https://doc.rust-lang.org/reference/behavior-considered-undefined.html> ``` ### Explanation Calling methods whose safety invariants requires non-null pointer with a null pointer is undefined behavior. ----- The lint use a list of functions to know which functions and arguments to checks, this could be improved in the future with a rustc attribute, or maybe even with a `#[diagnostic]` attribute. This PR also includes some small refactoring to avoid some ambiguities in naming, those can be done in another PR is desired. `@rustbot` label: +I-lang-nominated r? compiler
Uplift `clippy::invalid_null_ptr_usage` lint as `invalid_null_arguments` This PR aims at uplifting the `clippy::invalid_null_ptr_usage` lint into rustc, this is similar to the [`clippy::invalid_utf8_in_unchecked` uplift](rust-lang/rust#111543) a few months ago, in the sense that those two lints lint on invalid parameter(s), here a null pointer where it is unexpected and UB to pass one. *For context: GitHub Search reveals that just for `slice::from_raw_parts{_mut}` [~20 invalid usages](hhttps://github.com/search?q=lang%3Arust+%2Fslice%3A%3Afrom_raw_parts%28_mut%29%3F%5C%28ptr%3A%3Anull%2F+NOT+path%3A%2F%5Eclippy_lints%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Erust%5C%2Fsrc%5C%2Ftools%5C%2Fclippy%5C%2Fclippy_lints%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Esrc%5C%2Ftools%5C%2Fclippy%5C%2Fclippy_lints%5C%2Fsrc%5C%2F%2F&type=code) with `ptr::null` and an additional [4 invalid usages](https://github.com/search?q=lang%3Arust+%2Fslice%3A%3Afrom_raw_parts%5C%280%28%5C%29%7C+as%29%2F+NOT+path%3A%2F%5Eclippy_lints%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Erust%5C%2Fsrc%5C%2Ftools%5C%2Fclippy%5C%2Fclippy_lints%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Esrc%5C%2Ftools%5C%2Fclippy%5C%2Fclippy_lints%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Eutils%5C%2Ftinystr%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Eutils%5C%2Fzerovec%5C%2Fsrc%5C%2F%2F+NOT+path%3A%2F%5Eprovider%5C%2Fcore%5C%2Fsrc%5C%2F%2F&type=code) with `0 as *const ...`-ish casts.* ----- ## `invalid_null_arguments` (deny-by-default) The `invalid_null_arguments` lint checks for invalid usage of null pointers. ### Example ```rust // Undefined behavior unsafe { std::slice::from_raw_parts(ptr::null(), 1); } ``` Produces: ``` error: calling this function with a null pointer is Undefined Behavior, even if the result of the function is unused --> $DIR/invalid_null_args.rs:21:23 | LL | let _: &[usize] = std::slice::from_raw_parts(ptr::null_mut(), 0); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^---------------^^^^ | | | null pointer originates from here | = help: for more information, visit <https://doc.rust-lang.org/std/ptr/index.html> and <https://doc.rust-lang.org/reference/behavior-considered-undefined.html> ``` ### Explanation Calling methods whose safety invariants requires non-null pointer with a null pointer is undefined behavior. ----- The lint use a list of functions to know which functions and arguments to checks, this could be improved in the future with a rustc attribute, or maybe even with a `#[diagnostic]` attribute. This PR also includes some small refactoring to avoid some ambiguities in naming, those can be done in another PR is desired. `@rustbot` label: +I-lang-nominated r? compiler
This PR aims at uplifting the
clippy::invalid_utf8_in_uncheckedlint into two lints.invalid_from_utf8_unchecked(deny-by-default)
The
invalid_from_utf8_uncheckedlint checks for calls tostd::str::from_utf8_uncheckedandstd::str::from_utf8_unchecked_mutwith an invalid UTF-8 literal.Example
Explanation
Creating such a
strwould result in undefined behavior as per documentation forstd::str::from_utf8_uncheckedandstd::str::from_utf8_unchecked_mut.invalid_from_utf8(warn-by-default)
The
invalid_from_utf8lint checks for calls tostd::str::from_utf8andstd::str::from_utf8_mutwith an invalid UTF-8 literal.Example
Explanation
Trying to create such a
strwould always return an error as per documentation forstd::str::from_utf8andstd::str::from_utf8_mut.Mostly followed the instructions for uplifting a clippy lint described here: #99696 (review)
@rustbot label: +I-lang-nominated
r? compiler
For Clippy:
changelog: Moves: Uplifted
clippy::invalid_utf8_in_uncheckedinto rustc