From 6f5d8d18e9adec87479a89dfdca2007a1e6583e5 Mon Sep 17 00:00:00 2001 From: "Jeff Washington (jwash)" <75863576+jeffwashington@users.noreply.github.com> Date: Tue, 23 Mar 2021 14:52:59 -0500 Subject: [PATCH] remove new alloc on deserialization (#15636) --- programs/bpf_loader/src/serialization.rs | 5 ++++- sdk/program/src/pubkey.rs | 6 ++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/programs/bpf_loader/src/serialization.rs b/programs/bpf_loader/src/serialization.rs index bc003efd29..123b2d4910 100644 --- a/programs/bpf_loader/src/serialization.rs +++ b/programs/bpf_loader/src/serialization.rs @@ -251,7 +251,10 @@ pub fn deserialize_parameters_aligned( + size_of::() // executable + 4 // padding to 128-bit aligned + size_of::(); // key - account.owner = Pubkey::new(&buffer[start..start + size_of::()]); + account + .owner + .as_mut() + .copy_from_slice(&buffer[start..start + size_of::()]); start += size_of::(); // owner account.lamports = LittleEndian::read_u64(&buffer[start..]); start += size_of::(); // lamports diff --git a/sdk/program/src/pubkey.rs b/sdk/program/src/pubkey.rs index 77c98fd46a..fdabab1e8a 100644 --- a/sdk/program/src/pubkey.rs +++ b/sdk/program/src/pubkey.rs @@ -325,6 +325,12 @@ impl AsRef<[u8]> for Pubkey { } } +impl AsMut<[u8]> for Pubkey { + fn as_mut(&mut self) -> &mut [u8] { + &mut self.0[..] + } +} + impl fmt::Debug for Pubkey { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "{}", bs58::encode(self.0).into_string())