@@ -453,6 +453,83 @@ mod tests {
453453 primitive_int_test ! ( f64 , test_ser_de_f64) ;
454454 primitive_int_test ! ( char , test_ser_de_char) ;
455455
456+ #[ test]
457+ fn test_corrupted_string_len ( ) {
458+ let vm = VersionMap :: new ( ) ;
459+ let mut buffer = vec ! [ 0u8 ; 1024 ] ;
460+
461+ let string = String :: from ( "Test string1" ) ;
462+ string
463+ . serialize ( & mut buffer. as_mut_slice ( ) , & vm, 1 )
464+ . unwrap ( ) ;
465+
466+ // Test corrupt length field.
467+ assert_eq ! (
468+ <String as Versionize >:: deserialize(
469+ & mut buffer. as_slice( ) . split_first( ) . unwrap( ) . 1 ,
470+ & vm,
471+ 1
472+ )
473+ . unwrap_err( ) ,
474+ VersionizeError :: StringLength ( 6052837899185946624 )
475+ ) ;
476+
477+ // Test incomplete string.
478+ assert_eq ! (
479+ <String as Versionize >:: deserialize( & mut buffer. as_slice( ) . split_at( 6 ) . 0 , & vm, 1 )
480+ . unwrap_err( ) ,
481+ VersionizeError :: Deserialize (
482+ "Io(Custom { kind: UnexpectedEof, error: \" failed to fill whole buffer\" })"
483+ . to_owned( )
484+ )
485+ ) ;
486+
487+ // Test NULL string len.
488+ buffer[ 0 ] = 0 ;
489+ assert_eq ! (
490+ <String as Versionize >:: deserialize( & mut buffer. as_slice( ) , & vm, 1 ) . unwrap( ) ,
491+ String :: new( )
492+ ) ;
493+ }
494+
495+ #[ test]
496+ fn test_corrupted_vec_len ( ) {
497+ let vm = VersionMap :: new ( ) ;
498+ let mut buffer = vec ! [ 0u8 ; 1024 ] ;
499+
500+ let mut string = String :: from ( "Test string1" ) ;
501+ let vec = unsafe { string. as_mut_vec ( ) } ;
502+ vec. serialize ( & mut buffer. as_mut_slice ( ) , & vm, 1 ) . unwrap ( ) ;
503+
504+ // Test corrupt length field.
505+ assert_eq ! (
506+ <Vec <u8 > as Versionize >:: deserialize(
507+ & mut buffer. as_slice( ) . split_first( ) . unwrap( ) . 1 ,
508+ & vm,
509+ 1
510+ )
511+ . unwrap_err( ) ,
512+ VersionizeError :: VecLength ( 6052837899185946624 )
513+ ) ;
514+
515+ // Test incomplete Vec.
516+ assert_eq ! (
517+ <Vec <u8 > as Versionize >:: deserialize( & mut buffer. as_slice( ) . split_at( 6 ) . 0 , & vm, 1 )
518+ . unwrap_err( ) ,
519+ VersionizeError :: Deserialize (
520+ "Io(Custom { kind: UnexpectedEof, error: \" failed to fill whole buffer\" })"
521+ . to_owned( )
522+ )
523+ ) ;
524+
525+ // Test NULL Vec len.
526+ buffer[ 0 ] = 0 ;
527+ assert_eq ! (
528+ <Vec <u8 > as Versionize >:: deserialize( & mut buffer. as_slice( ) , & vm, 1 ) . unwrap( ) ,
529+ Vec :: new( )
530+ ) ;
531+ }
532+
456533 #[ test]
457534 fn test_ser_de_u32_tuple ( ) {
458535 let vm = VersionMap :: new ( ) ;
0 commit comments