Browse Source

lang: Allow zero_size accounts to be larger than account schema (#1158)

Blaž Hrastnik 3 years ago
parent
commit
787527fdff
1 changed files with 6 additions and 3 deletions
  1. 6 3
      lang/src/accounts/loader_account.rs

+ 6 - 3
lang/src/accounts/loader_account.rs

@@ -15,6 +15,7 @@ use std::cell::{Ref, RefMut};
 use std::fmt;
 use std::fmt;
 use std::io::Write;
 use std::io::Write;
 use std::marker::PhantomData;
 use std::marker::PhantomData;
+use std::mem;
 use std::ops::DerefMut;
 use std::ops::DerefMut;
 
 
 /// Type facilitating on demand zero copy deserialization.
 /// Type facilitating on demand zero copy deserialization.
@@ -154,7 +155,9 @@ impl<'info, T: ZeroCopy + Owner> AccountLoader<'info, T> {
             return Err(ErrorCode::AccountDiscriminatorMismatch.into());
             return Err(ErrorCode::AccountDiscriminatorMismatch.into());
         }
         }
 
 
-        Ok(Ref::map(data, |data| bytemuck::from_bytes(&data[8..])))
+        Ok(Ref::map(data, |data| {
+            bytemuck::from_bytes(&data[8..mem::size_of::<T>() + 8])
+        }))
     }
     }
 
 
     /// Returns a `RefMut` to the account data structure for reading or writing.
     /// Returns a `RefMut` to the account data structure for reading or writing.
@@ -173,7 +176,7 @@ impl<'info, T: ZeroCopy + Owner> AccountLoader<'info, T> {
         }
         }
 
 
         Ok(RefMut::map(data, |data| {
         Ok(RefMut::map(data, |data| {
-            bytemuck::from_bytes_mut(&mut data.deref_mut()[8..])
+            bytemuck::from_bytes_mut(&mut data.deref_mut()[8..mem::size_of::<T>() + 8])
         }))
         }))
     }
     }
 
 
@@ -197,7 +200,7 @@ impl<'info, T: ZeroCopy + Owner> AccountLoader<'info, T> {
         }
         }
 
 
         Ok(RefMut::map(data, |data| {
         Ok(RefMut::map(data, |data| {
-            bytemuck::from_bytes_mut(&mut data.deref_mut()[8..])
+            bytemuck::from_bytes_mut(&mut data.deref_mut()[8..mem::size_of::<T>() + 8])
         }))
         }))
     }
     }
 }
 }