mirror of
https://github.com/protocolbuffers/protobuf
synced 2026-08-26 02:23:14 -04:00
The invariant is that PtrAndLen may hold ptr+len values which are legal for _either_ C++ string_view or Rust slices: constructing one from either Rust or C++ permits the laxest constraints, and care must be taken when converting a PtrAndLen into either type. For "into Rust slice" case to handle is that len=0 ptr must be non-null, so len=0 ptr=null gets turned into an arbitrary non-null pointer as provided by std::ptr::NonNull::dangling() (any preexisting non-null ptr is kept in that direction). For the "into C++ slice" the risk is more obscure that a Rust non-null pointer could potentially be an illegal pointer (such that ptr+0 is not a legal operation in C++), so when going into C++ we map any len=0 cases into ptr=null to avoid this as a possible risk. PiperOrigin-RevId: 704776210 |
||
|---|---|---|
| .. | ||
| BUILD | ||
| compare.cc | ||
| compare.h | ||
| debug.cc | ||
| debug.h | ||
| map.cc | ||
| message.cc | ||
| repeated.cc | ||
| rust_alloc_for_cpp_api.h | ||
| rust_alloc_for_cpp_api.rs | ||
| serialized_data.h | ||
| strings.cc | ||
| strings.h | ||