From f450ce286884f83f7948b027f824e191079f6775 Mon Sep 17 00:00:00 2001 From: Marcel Hlopko Date: Fri, 16 Jun 2023 01:35:39 -0700 Subject: [PATCH] Do not pass dangling pointers to C++ This is the reverse direction of cl/539924021. PiperOrigin-RevId: 540812123 --- .../protobuf/compiler/rust/accessors/singular_bytes.cc | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/google/protobuf/compiler/rust/accessors/singular_bytes.cc b/src/google/protobuf/compiler/rust/accessors/singular_bytes.cc index 7f57d8396ce1..b9e0a897c83f 100644 --- a/src/google/protobuf/compiler/rust/accessors/singular_bytes.cc +++ b/src/google/protobuf/compiler/rust/accessors/singular_bytes.cc @@ -61,13 +61,17 @@ class SingularBytes final : public AccessorGenerator { return None; } unsafe { - let val = $getter_thunk$(self.msg); - Some($std$::slice::from_raw_parts(val.ptr, val.len)) + Some($getter_thunk$(self.msg).as_ref()) } } pub fn $field$_set(&mut self, val: Option<&[u8]>) { match val { - Some(val) => unsafe { $setter_thunk$(self.msg, val.as_ptr(), val.len()) }, + Some(val) => + if val.len() == 0 { + unsafe { $setter_thunk$(self.msg, $std$::ptr::null(), 0) } + } else { + unsafe { $setter_thunk$(self.msg, val.as_ptr(), val.len()) } + }, None => unsafe { $clearer_thunk$(self.msg) }, } }