Skip to content

Commit 134145b

Browse files
committed
Update vmm-sys-util to 0.12.1
Signed-off-by: Patrick Roy <[email protected]>
1 parent c26a84f commit 134145b

File tree

3 files changed

+36
-17
lines changed

3 files changed

+36
-17
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ serde_derive = "1.0.27"
1515
bincode = "1.2.1"
1616
versionize_derive = "0.1.6"
1717
crc64 = "2.0.0"
18-
vmm-sys-util = "0.11.0"
18+
vmm-sys-util = "0.12.1"
1919

2020
[build-dependencies]
2121
proc-macro2 = "1.0"

src/primitives.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -362,8 +362,12 @@ where
362362
// Header(T) fields will be initialized by Default trait impl.
363363
let mut object = FamStructWrapper::from_entries(&entries)
364364
.map_err(|ref err| VersionizeError::Deserialize(format!("{:?}", err)))?;
365-
// Update Default T with the deserialized header.
366-
*object.as_mut_fam_struct() = header;
365+
// SAFETY: We check above that the length in the header matches the number of elements
366+
// in the FAM.
367+
unsafe {
368+
// Update Default T with the deserialized header.
369+
*object.as_mut_fam_struct() = header;
370+
}
367371
Ok(object)
368372
}
369373

tests/test.rs

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
// SPDX-License-Identifier: Apache-2.0
33

4+
#![allow(clippy::undocumented_unsafe_blocks)]
45
#![allow(clippy::missing_safety_doc)]
56

67
extern crate versionize;
@@ -1363,9 +1364,11 @@ fn test_versionize_famstructwrapper() {
13631364
.set_type_version(Message::type_id(), 4);
13641365

13651366
let mut state = MessageFamStructWrapper::new(0).unwrap();
1366-
state.as_mut_fam_struct().padding = 8;
1367-
state.as_mut_fam_struct().extra_value = 16;
1368-
state.as_mut_fam_struct().status = Wrapping(true);
1367+
unsafe {
1368+
state.as_mut_fam_struct().padding = 8;
1369+
state.as_mut_fam_struct().extra_value = 16;
1370+
state.as_mut_fam_struct().status = Wrapping(true);
1371+
}
13691372

13701373
state.push(1).unwrap();
13711374
state.push(2).unwrap();
@@ -1482,8 +1485,10 @@ pub struct FamStructTest {
14821485
impl FamStructTest {
14831486
fn default_message(_target_version: u16) -> Vec<MessageFamStructWrapper> {
14841487
let mut f = MessageFamStructWrapper::new(0).unwrap();
1485-
f.as_mut_fam_struct().padding = 1;
1486-
f.as_mut_fam_struct().extra_value = 2;
1488+
unsafe {
1489+
f.as_mut_fam_struct().padding = 1;
1490+
f.as_mut_fam_struct().extra_value = 2;
1491+
}
14871492

14881493
f.push(10).unwrap();
14891494
f.push(20).unwrap();
@@ -1508,8 +1513,10 @@ impl FamStructTest {
15081513
assert!(target_version < 2);
15091514

15101515
let mut f = MessageFamStructWrapper::new(0).unwrap();
1511-
f.as_mut_fam_struct().padding = 3;
1512-
f.as_mut_fam_struct().extra_value = 4;
1516+
unsafe {
1517+
f.as_mut_fam_struct().padding = 3;
1518+
f.as_mut_fam_struct().extra_value = 4;
1519+
}
15131520

15141521
f.push(10).unwrap();
15151522
f.push(20).unwrap();
@@ -1532,13 +1539,17 @@ fn test_versionize_struct_with_famstructs() {
15321539
let mut snapshot_mem = vec![0u8; 1024];
15331540

15341541
let mut f = MessageFamStructWrapper::new(0).unwrap();
1535-
f.as_mut_fam_struct().padding = 5;
1536-
f.as_mut_fam_struct().extra_value = 6;
1542+
unsafe {
1543+
f.as_mut_fam_struct().padding = 5;
1544+
f.as_mut_fam_struct().extra_value = 6;
1545+
}
15371546
f.push(10).unwrap();
15381547

15391548
let mut f2 = MessageFamStructWrapper::new(0).unwrap();
1540-
f2.as_mut_fam_struct().padding = 7;
1541-
f2.as_mut_fam_struct().extra_value = 8;
1549+
unsafe {
1550+
f2.as_mut_fam_struct().padding = 7;
1551+
f2.as_mut_fam_struct().extra_value = 8;
1552+
}
15421553
f2.push(20).unwrap();
15431554

15441555
let state = FamStructTest {
@@ -1614,7 +1625,9 @@ impl SomeStruct {
16141625
fn ser_u16(&mut self, target_version: u16) -> VersionizeResult<()> {
16151626
// Fail if semantic serialization is called for the latest version.
16161627
assert!(target_version < 2);
1617-
self.message.as_mut_fam_struct().padding += 2;
1628+
unsafe {
1629+
self.message.as_mut_fam_struct().padding += 2;
1630+
}
16181631

16191632
Ok(())
16201633
}
@@ -1631,7 +1644,9 @@ impl SomeStruct2 {
16311644
fn ser_u16(&mut self, target_version: u16) -> VersionizeResult<()> {
16321645
// Fail if semantic serialization is called for the latest version.
16331646
assert!(target_version < 2);
1634-
self.message.as_mut_fam_struct().padding += 2;
1647+
unsafe {
1648+
self.message.as_mut_fam_struct().padding += 2;
1649+
}
16351650

16361651
Ok(())
16371652
}
@@ -1648,7 +1663,7 @@ fn test_famstructwrapper_clone() {
16481663
vm.new_version().set_type_version(SomeStruct::type_id(), 2);
16491664

16501665
let mut f = MessageFamStructWrapper::new(0).unwrap();
1651-
f.as_mut_fam_struct().padding = 8;
1666+
unsafe { f.as_mut_fam_struct().padding = 8 };
16521667

16531668
f.push(1).unwrap();
16541669
f.push(2).unwrap();

0 commit comments

Comments
 (0)