Skip to content

Commit e59b127

Browse files
committed
Add negative unit tests.
- Add tests for corrupted/incomplete/null len vec - Add tests for corrupted/incomplete/null len string Signed-off-by: Andrei Sandu <[email protected]>
1 parent a27d07a commit e59b127

File tree

1 file changed

+77
-0
lines changed

1 file changed

+77
-0
lines changed

src/primitives.rs

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)