From bfe1ab96d717d1dda50e499b360f2e2f57e1750a Mon Sep 17 00:00:00 2001 From: Konrad Borowski Date: Wed, 3 Jun 2020 20:55:12 +0200 Subject: [PATCH] Clarify that str data must still be initialized --- src/what-unsafe-does.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/what-unsafe-does.md b/src/what-unsafe-does.md index 9d9d44a..f89fb82 100644 --- a/src/what-unsafe-does.md +++ b/src/what-unsafe-does.md @@ -30,7 +30,7 @@ language cares about is preventing the following things: * a `char` outside the ranges [0x0, 0xD7FF] and [0xE000, 0x10FFFF] * a `!` (all values are invalid for this type) * an integer (`i*`/`u*`), floating point value (`f*`), or raw pointer read from - [uninitialized memory][] + [uninitialized memory][], or uninitialized memory in a `str`. * a reference/`Box` that is dangling, unaligned, or points to an invalid value. * a wide reference, `Box`, or raw pointer that has invalid metadata: * `dyn Trait` metadata is invalid if it is not a pointer to a vtable for @@ -48,11 +48,11 @@ A reference/pointer is "dangling" if it is null or not all of the bytes it points to are part of the same allocation (so in particular they all have to be part of *some* allocation). The span of bytes it points to is determined by the pointer value and the size of the pointee type. As a consequence, if the span is -empty, "dangling" is the same as "non-null". Note that slices point to their -entire range, so it's important that the length metadata is never too large -(in particular, allocations and therefore slices cannot be bigger than -`isize::MAX` bytes). If for some reason this is too cumbersome, consider using -raw pointers. +empty, "dangling" is the same as "non-null". Note that slices and strings point +to their entire range, so it's important that the length metadata is never too +large (in particular, allocations and therefore slices and strings cannot be +bigger than `isize::MAX` bytes). If for some reason this is too cumbersome, +consider using raw pointers. That's it. That's all the causes of Undefined Behavior baked into Rust. Of course, unsafe functions and traits are free to declare arbitrary other