@@ -11,7 +11,8 @@ use rkyv::ser::serializers::{
11
11
BufferScratch , BufferSerializer , CompositeSerializer ,
12
12
} ;
13
13
use rkyv:: ser:: Serializer ;
14
- use rkyv:: { archived_root, Archive , Deserialize , Infallible , Serialize } ;
14
+ use rkyv:: validation:: validators:: DefaultValidator ;
15
+ use rkyv:: { check_archived_root, Archive , Deserialize , Infallible , Serialize } ;
15
16
16
17
use crate :: types:: StandardBufSerializer ;
17
18
@@ -21,14 +22,16 @@ use crate::types::StandardBufSerializer;
21
22
pub fn wrap_call < A , R , F > ( arg_len : u32 , f : F ) -> u32
22
23
where
23
24
A : Archive ,
24
- A :: Archived : Deserialize < A , Infallible > ,
25
+ A :: Archived : Deserialize < A , Infallible >
26
+ + for < ' b > bytecheck:: CheckBytes < DefaultValidator < ' b > > ,
25
27
R : for < ' a > Serialize < StandardBufSerializer < ' a > > ,
26
28
F : Fn ( A ) -> R ,
27
29
{
28
30
with_arg_buf ( |buf| {
29
31
let slice = & buf[ ..arg_len as usize ] ;
30
32
31
- let aa: & A :: Archived = unsafe { archived_root :: < A > ( slice) } ;
33
+ let aa: & A :: Archived = check_archived_root :: < A > ( slice)
34
+ . expect ( "Argument should correctly deserialize" ) ;
32
35
let a: A = aa. deserialize ( & mut Infallible ) . unwrap ( ) ;
33
36
34
37
let ret = f ( a) ;
0 commit comments