mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-11-21 23:18:13 +00:00
fix(core): unaligned array in protobuf decoder
[no changelog]
This commit is contained in:
parent
48b9c8456f
commit
eb74c1a8a5
@ -93,7 +93,7 @@ if not PROTOC:
|
|||||||
PROTOC_PREFIX = Path(PROTOC).resolve().parent.parent
|
PROTOC_PREFIX = Path(PROTOC).resolve().parent.parent
|
||||||
|
|
||||||
|
|
||||||
ENUM_ENTRY = c.PrefixedArray(c.Byte, c.Int16ul)
|
ENUM_ENTRY = c.PrefixedArray(c.Int16ul, c.Int16ul)
|
||||||
|
|
||||||
FIELD_STRUCT = c.Struct(
|
FIELD_STRUCT = c.Struct(
|
||||||
"tag" / c.Byte,
|
"tag" / c.Byte,
|
||||||
|
@ -209,7 +209,7 @@ pub unsafe fn get_msg(msg_offset: u16) -> MsgDef {
|
|||||||
unsafe fn get_enum(enum_offset: u16) -> EnumDef {
|
unsafe fn get_enum(enum_offset: u16) -> EnumDef {
|
||||||
// #[repr(C, packed)]
|
// #[repr(C, packed)]
|
||||||
// struct EnumDef {
|
// struct EnumDef {
|
||||||
// count: u8,
|
// count: u16,
|
||||||
// vals: [u16],
|
// vals: [u16],
|
||||||
// }
|
// }
|
||||||
|
|
||||||
@ -217,8 +217,10 @@ unsafe fn get_enum(enum_offset: u16) -> EnumDef {
|
|||||||
// definition inside `ENUM_DEFS`.
|
// definition inside `ENUM_DEFS`.
|
||||||
unsafe {
|
unsafe {
|
||||||
let ptr = ENUM_DEFS.as_ptr().add(enum_offset as usize);
|
let ptr = ENUM_DEFS.as_ptr().add(enum_offset as usize);
|
||||||
let count = ptr.offset(0).read() as usize;
|
let count_lo = ptr.offset(0).read();
|
||||||
let vals = ptr.offset(1);
|
let count_hi = ptr.offset(1).read();
|
||||||
|
let count = u16::from_le_bytes([count_lo, count_hi]) as usize;
|
||||||
|
let vals = ptr.offset(2);
|
||||||
|
|
||||||
EnumDef {
|
EnumDef {
|
||||||
values: slice::from_raw_parts(vals.cast(), count),
|
values: slice::from_raw_parts(vals.cast(), count),
|
||||||
|
Loading…
Reference in New Issue
Block a user