Add invalid_from_utf8 analogous to invalid_from_utf8_unchecked
This commit is contained in:
parent
a0612d90b0
commit
7f99c7d3e6
7 changed files with 169 additions and 21 deletions
|
|
@ -2,6 +2,7 @@
|
|||
|
||||
#![feature(concat_bytes)]
|
||||
#![warn(invalid_from_utf8_unchecked)]
|
||||
#![warn(invalid_from_utf8)]
|
||||
|
||||
pub fn from_utf8_unchecked_mut() {
|
||||
// Valid
|
||||
|
|
@ -46,4 +47,47 @@ pub fn from_utf8_unchecked() {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn from_utf8_mut() {
|
||||
// Valid
|
||||
{
|
||||
std::str::from_utf8_mut(&mut [99, 108, 105, 112, 112, 121]);
|
||||
std::str::from_utf8_mut(&mut [b'c', b'l', b'i', b'p', b'p', b'y']);
|
||||
|
||||
let x = 0xa0;
|
||||
std::str::from_utf8_mut(&mut [0xc0, x]);
|
||||
}
|
||||
|
||||
// Invalid
|
||||
{
|
||||
std::str::from_utf8_mut(&mut [99, 108, 130, 105, 112, 112, 121]);
|
||||
//~^ WARN calls to `std::str::from_utf8_mut`
|
||||
std::str::from_utf8_mut(&mut [b'c', b'l', b'\x82', b'i', b'p', b'p', b'y']);
|
||||
//~^ WARN calls to `std::str::from_utf8_mut`
|
||||
}
|
||||
}
|
||||
|
||||
pub fn from_utf8() {
|
||||
// Valid
|
||||
{
|
||||
std::str::from_utf8(&[99, 108, 105, 112, 112, 121]);
|
||||
std::str::from_utf8(&[b'c', b'l', b'i', b'p', b'p', b'y']);
|
||||
std::str::from_utf8(b"clippy");
|
||||
|
||||
let x = 0xA0;
|
||||
std::str::from_utf8(&[0xC0, x]);
|
||||
}
|
||||
|
||||
// Invalid
|
||||
{
|
||||
std::str::from_utf8(&[99, 108, 130, 105, 112, 112, 121]);
|
||||
//~^ WARN calls to `std::str::from_utf8`
|
||||
std::str::from_utf8(&[b'c', b'l', b'\x82', b'i', b'p', b'p', b'y']);
|
||||
//~^ WARN calls to `std::str::from_utf8`
|
||||
std::str::from_utf8(b"cl\x82ippy");
|
||||
//~^ WARN calls to `std::str::from_utf8`
|
||||
std::str::from_utf8(concat_bytes!(b"cl", b"\x82ippy"));
|
||||
//~^ WARN calls to `std::str::from_utf8`
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
warning: calls to `std::str::from_utf8_unchecked_mut` with a invalid literal are undefined behavior
|
||||
--> $DIR/invalid_from_utf8.rs:18:9
|
||||
--> $DIR/invalid_from_utf8.rs:19:9
|
||||
|
|
||||
LL | std::str::from_utf8_unchecked_mut(&mut [99, 108, 130, 105, 112, 112, 121]);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---------------------------------------^
|
||||
|
|
@ -13,7 +13,7 @@ LL | #![warn(invalid_from_utf8_unchecked)]
|
|||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: calls to `std::str::from_utf8_unchecked_mut` with a invalid literal are undefined behavior
|
||||
--> $DIR/invalid_from_utf8.rs:20:9
|
||||
--> $DIR/invalid_from_utf8.rs:21:9
|
||||
|
|
||||
LL | std::str::from_utf8_unchecked_mut(&mut [b'c', b'l', b'\x82', b'i', b'p', b'p', b'y']);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--------------------------------------------------^
|
||||
|
|
@ -21,7 +21,7 @@ LL | std::str::from_utf8_unchecked_mut(&mut [b'c', b'l', b'\x82', b'i',
|
|||
| the literal was valid UTF-8 up to the 2 bytes
|
||||
|
||||
warning: calls to `std::str::from_utf8_unchecked` with a invalid literal are undefined behavior
|
||||
--> $DIR/invalid_from_utf8.rs:38:9
|
||||
--> $DIR/invalid_from_utf8.rs:39:9
|
||||
|
|
||||
LL | std::str::from_utf8_unchecked(&[99, 108, 130, 105, 112, 112, 121]);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-----------------------------------^
|
||||
|
|
@ -29,7 +29,7 @@ LL | std::str::from_utf8_unchecked(&[99, 108, 130, 105, 112, 112, 121]);
|
|||
| the literal was valid UTF-8 up to the 2 bytes
|
||||
|
||||
warning: calls to `std::str::from_utf8_unchecked` with a invalid literal are undefined behavior
|
||||
--> $DIR/invalid_from_utf8.rs:40:9
|
||||
--> $DIR/invalid_from_utf8.rs:41:9
|
||||
|
|
||||
LL | std::str::from_utf8_unchecked(&[b'c', b'l', b'\x82', b'i', b'p', b'p', b'y']);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^----------------------------------------------^
|
||||
|
|
@ -37,7 +37,7 @@ LL | std::str::from_utf8_unchecked(&[b'c', b'l', b'\x82', b'i', b'p', b'
|
|||
| the literal was valid UTF-8 up to the 2 bytes
|
||||
|
||||
warning: calls to `std::str::from_utf8_unchecked` with a invalid literal are undefined behavior
|
||||
--> $DIR/invalid_from_utf8.rs:42:9
|
||||
--> $DIR/invalid_from_utf8.rs:43:9
|
||||
|
|
||||
LL | std::str::from_utf8_unchecked(b"cl\x82ippy");
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-------------^
|
||||
|
|
@ -45,12 +45,66 @@ LL | std::str::from_utf8_unchecked(b"cl\x82ippy");
|
|||
| the literal was valid UTF-8 up to the 2 bytes
|
||||
|
||||
warning: calls to `std::str::from_utf8_unchecked` with a invalid literal are undefined behavior
|
||||
--> $DIR/invalid_from_utf8.rs:44:9
|
||||
--> $DIR/invalid_from_utf8.rs:45:9
|
||||
|
|
||||
LL | std::str::from_utf8_unchecked(concat_bytes!(b"cl", b"\x82ippy"));
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^---------------------------------^
|
||||
| |
|
||||
| the literal was valid UTF-8 up to the 2 bytes
|
||||
|
||||
warning: 6 warnings emitted
|
||||
warning: calls to `std::str::from_utf8_mut` with a invalid literal always return an error
|
||||
--> $DIR/invalid_from_utf8.rs:62:9
|
||||
|
|
||||
LL | std::str::from_utf8_mut(&mut [99, 108, 130, 105, 112, 112, 121]);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^---------------------------------------^
|
||||
| |
|
||||
| the literal was valid UTF-8 up to the 2 bytes
|
||||
|
|
||||
note: the lint level is defined here
|
||||
--> $DIR/invalid_from_utf8.rs:5:9
|
||||
|
|
||||
LL | #![warn(invalid_from_utf8)]
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
warning: calls to `std::str::from_utf8_mut` with a invalid literal always return an error
|
||||
--> $DIR/invalid_from_utf8.rs:64:9
|
||||
|
|
||||
LL | std::str::from_utf8_mut(&mut [b'c', b'l', b'\x82', b'i', b'p', b'p', b'y']);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^--------------------------------------------------^
|
||||
| |
|
||||
| the literal was valid UTF-8 up to the 2 bytes
|
||||
|
||||
warning: calls to `std::str::from_utf8` with a invalid literal always return an error
|
||||
--> $DIR/invalid_from_utf8.rs:82:9
|
||||
|
|
||||
LL | std::str::from_utf8(&[99, 108, 130, 105, 112, 112, 121]);
|
||||
| ^^^^^^^^^^^^^^^^^^^^-----------------------------------^
|
||||
| |
|
||||
| the literal was valid UTF-8 up to the 2 bytes
|
||||
|
||||
warning: calls to `std::str::from_utf8` with a invalid literal always return an error
|
||||
--> $DIR/invalid_from_utf8.rs:84:9
|
||||
|
|
||||
LL | std::str::from_utf8(&[b'c', b'l', b'\x82', b'i', b'p', b'p', b'y']);
|
||||
| ^^^^^^^^^^^^^^^^^^^^----------------------------------------------^
|
||||
| |
|
||||
| the literal was valid UTF-8 up to the 2 bytes
|
||||
|
||||
warning: calls to `std::str::from_utf8` with a invalid literal always return an error
|
||||
--> $DIR/invalid_from_utf8.rs:86:9
|
||||
|
|
||||
LL | std::str::from_utf8(b"cl\x82ippy");
|
||||
| ^^^^^^^^^^^^^^^^^^^^-------------^
|
||||
| |
|
||||
| the literal was valid UTF-8 up to the 2 bytes
|
||||
|
||||
warning: calls to `std::str::from_utf8` with a invalid literal always return an error
|
||||
--> $DIR/invalid_from_utf8.rs:88:9
|
||||
|
|
||||
LL | std::str::from_utf8(concat_bytes!(b"cl", b"\x82ippy"));
|
||||
| ^^^^^^^^^^^^^^^^^^^^---------------------------------^
|
||||
| |
|
||||
| the literal was valid UTF-8 up to the 2 bytes
|
||||
|
||||
warning: 12 warnings emitted
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue