Mercurial > crates > nonstick
comparison libpam-sys/libpam-sys-helpers/src/memory.rs @ 143:ebb71a412b58
Turn everything into OsString and Just Walk Out! for strings with nul.
To reduce the hazard surface of the API, this replaces most uses of &str
with &OsStr (and likewise with String/OsString).
Also, I've decided that instead of dealing with callers putting `\0`
in their parameters, I'm going to follow the example of std::env and
Just Walk Out! (i.e., panic!()).
This makes things a lot less annoying for both me and (hopefully) users.
| author | Paul Fisher <paul@pfish.zone> |
|---|---|
| date | Sat, 05 Jul 2025 22:12:46 -0400 |
| parents | add7228adb2f |
| children |
comparison
equal
deleted
inserted
replaced
| 142:5c1e315c18ff | 143:ebb71a412b58 |
|---|---|
| 369 /// - The borrowed data must not outlive the pointer's validity. | 369 /// - The borrowed data must not outlive the pointer's validity. |
| 370 pub unsafe fn contents<'a>(ptr: *const Self) -> (&'a [u8], u8) { | 370 pub unsafe fn contents<'a>(ptr: *const Self) -> (&'a [u8], u8) { |
| 371 let header: &Self = ptr.as_ref().unwrap_unchecked(); | 371 let header: &Self = ptr.as_ref().unwrap_unchecked(); |
| 372 (&Self::buffer_of(ptr)[5..], header.data_type) | 372 (&Self::buffer_of(ptr)[5..], header.data_type) |
| 373 } | 373 } |
| 374 | 374 |
| 375 /// Zeroes out the data of this payload. | 375 /// Zeroes out the data of this payload. |
| 376 /// | 376 /// |
| 377 /// # Safety | 377 /// # Safety |
| 378 /// | 378 /// |
| 379 /// - The pointer must point to a valid `BinaryPayload`. | 379 /// - The pointer must point to a valid `BinaryPayload`. |
| 380 /// - The binary payload must not be used in the future, | 380 /// - The binary payload must not be used in the future, |
| 381 /// since its length metadata is gone and so its buffer is unknown. | 381 /// since its length metadata is gone and so its buffer is unknown. |
| 382 pub unsafe fn zero(ptr: *mut Self) { | 382 pub unsafe fn zero(ptr: *mut Self) { |
| 383 let size = Self::total_bytes(ptr); | 383 let size = Self::total_bytes(ptr); |
| 453 /// | 453 /// |
| 454 /// You must provide a valid pointer, allocated by (or equivalent to one | 454 /// You must provide a valid pointer, allocated by (or equivalent to one |
| 455 /// allocated by) [`Self::new`]. For instance, passing a pointer allocated | 455 /// allocated by) [`Self::new`]. For instance, passing a pointer allocated |
| 456 /// by `malloc` to `OwnedBinaryPayload::<Vec<u8>>::from_ptr` is not allowed. | 456 /// by `malloc` to `OwnedBinaryPayload::<Vec<u8>>::from_ptr` is not allowed. |
| 457 pub unsafe fn from_ptr(ptr: NonNull<BinaryPayload>) -> Self { | 457 pub unsafe fn from_ptr(ptr: NonNull<BinaryPayload>) -> Self { |
| 458 Self(O::from_ptr(ptr.cast(), BinaryPayload::total_bytes(ptr.as_ptr()))) | 458 Self(O::from_ptr( |
| 459 ptr.cast(), | |
| 460 BinaryPayload::total_bytes(ptr.as_ptr()), | |
| 461 )) | |
| 459 } | 462 } |
| 460 } | 463 } |
| 461 | 464 |
| 462 #[cfg(test)] | 465 #[cfg(test)] |
| 463 mod tests { | 466 mod tests { |
