@@ -453,6 +453,83 @@ mod tests {
453
453
primitive_int_test ! ( f64 , test_ser_de_f64) ;
454
454
primitive_int_test ! ( char , test_ser_de_char) ;
455
455
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
+
456
533
#[ test]
457
534
fn test_ser_de_u32_tuple ( ) {
458
535
let vm = VersionMap :: new ( ) ;
0 commit comments