mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-07-31 10:58:43 +00:00
fix(core/protobuf): broken wire_id separation by enum
[no changelog]
This commit is contained in:
parent
4336ecf1ad
commit
d38ed8a6c5
@ -349,6 +349,7 @@ class Descriptor:
|
|||||||
]
|
]
|
||||||
logging.debug(f"found {len(self.files)} bitcoin-only files")
|
logging.debug(f"found {len(self.files)} bitcoin-only files")
|
||||||
|
|
||||||
|
# message_types is a nested dict: message_name -> wire_enum -> wire_id
|
||||||
self.message_types, self.wire_enum_extensions = self.get_wire_enums()
|
self.message_types, self.wire_enum_extensions = self.get_wire_enums()
|
||||||
|
|
||||||
# find messages and enums
|
# find messages and enums
|
||||||
@ -458,6 +459,9 @@ class Descriptor:
|
|||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def wire_enum_has_message(self, enum_name: str, message_name: str) -> bool:
|
||||||
|
return enum_name in self.message_types.get(message_name, {})
|
||||||
|
|
||||||
|
|
||||||
class PythonRenderer:
|
class PythonRenderer:
|
||||||
def __init__(self, descriptor: Descriptor, out_dir="", python_extension="py"):
|
def __init__(self, descriptor: Descriptor, out_dir="", python_extension="py"):
|
||||||
@ -718,9 +722,12 @@ class RustBlobRenderer:
|
|||||||
for en in wire_enum_names:
|
for en in wire_enum_names:
|
||||||
name_qstr = self.qstr_map[en]
|
name_qstr = self.qstr_map[en]
|
||||||
for m in wire_messages:
|
for m in wire_messages:
|
||||||
result.append(
|
if self.descriptor.wire_enum_has_message(en, m.name):
|
||||||
WIRETYPE_ENTRY.build((name_qstr, m.wire_type, self.msg_map[m.name]))
|
result.append(
|
||||||
)
|
WIRETYPE_ENTRY.build(
|
||||||
|
(name_qstr, m.wire_type, self.msg_map[m.name])
|
||||||
|
)
|
||||||
|
)
|
||||||
return b"".join(result)
|
return b"".join(result)
|
||||||
|
|
||||||
|
|
||||||
|
@ -38,6 +38,7 @@ static void _librust_qstrs(void) {
|
|||||||
MP_QSTR_MAX;
|
MP_QSTR_MAX;
|
||||||
MP_QSTR_MESSAGE_NAME;
|
MP_QSTR_MESSAGE_NAME;
|
||||||
MP_QSTR_MESSAGE_WIRE_TYPE;
|
MP_QSTR_MESSAGE_WIRE_TYPE;
|
||||||
|
MP_QSTR_MessageType;
|
||||||
MP_QSTR_Msg;
|
MP_QSTR_Msg;
|
||||||
MP_QSTR_MsgDef;
|
MP_QSTR_MsgDef;
|
||||||
MP_QSTR_NONE;
|
MP_QSTR_NONE;
|
||||||
|
@ -234,3 +234,17 @@ unsafe fn get_enum(enum_offset: u16) -> EnumDef {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
use crate::micropython::qstr::Qstr;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn wire_type_basic_lookup() {
|
||||||
|
// SignTx: 15
|
||||||
|
assert!(find_msg_offset_by_wire(Qstr::MP_QSTR_MessageType.to_u16(), 15).is_some());
|
||||||
|
// Guaranteed empty.
|
||||||
|
assert!(find_msg_offset_by_wire(Qstr::MP_QSTR_CONFIRMED.to_u16(), 15).is_none());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user