mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-07-30 18:38:27 +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")
|
||||
|
||||
# message_types is a nested dict: message_name -> wire_enum -> wire_id
|
||||
self.message_types, self.wire_enum_extensions = self.get_wire_enums()
|
||||
|
||||
# find messages and enums
|
||||
@ -458,6 +459,9 @@ class Descriptor:
|
||||
else:
|
||||
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:
|
||||
def __init__(self, descriptor: Descriptor, out_dir="", python_extension="py"):
|
||||
@ -718,9 +722,12 @@ class RustBlobRenderer:
|
||||
for en in wire_enum_names:
|
||||
name_qstr = self.qstr_map[en]
|
||||
for m in wire_messages:
|
||||
result.append(
|
||||
WIRETYPE_ENTRY.build((name_qstr, m.wire_type, self.msg_map[m.name]))
|
||||
)
|
||||
if self.descriptor.wire_enum_has_message(en, m.name):
|
||||
result.append(
|
||||
WIRETYPE_ENTRY.build(
|
||||
(name_qstr, m.wire_type, self.msg_map[m.name])
|
||||
)
|
||||
)
|
||||
return b"".join(result)
|
||||
|
||||
|
||||
|
@ -38,6 +38,7 @@ static void _librust_qstrs(void) {
|
||||
MP_QSTR_MAX;
|
||||
MP_QSTR_MESSAGE_NAME;
|
||||
MP_QSTR_MESSAGE_WIRE_TYPE;
|
||||
MP_QSTR_MessageType;
|
||||
MP_QSTR_Msg;
|
||||
MP_QSTR_MsgDef;
|
||||
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