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())