From 5f135563ccf40de41e011f9bfcc1ace28b532f29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dj8yf0=CE=BCl?= Date: Wed, 20 Mar 2024 19:39:45 +0200 Subject: [PATCH] feat: transform undisplayable characters for `FmtBuffer` --- fmt_buffer/src/lib.rs | 20 ++++++++++++++++++- .../common/action/function_call_permission.rs | 2 +- src/utils/types/elipsis_fields.rs | 2 +- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/fmt_buffer/src/lib.rs b/fmt_buffer/src/lib.rs index 4177e24..b1439fb 100644 --- a/fmt_buffer/src/lib.rs +++ b/fmt_buffer/src/lib.rs @@ -16,7 +16,14 @@ impl Buffer { } } - pub fn as_str(&self) -> &str { + pub fn as_str(&mut self) -> &str { + // NOTE: this workaround is needed until https://github.com/LedgerHQ/ledger-device-rust-sdk/issues/146 + // is handled at sdk level + for byte in self.buffer[..self.used].iter_mut() { + if *byte < 0x20 { + *byte = 0x7f; + } + } debug_assert!(self.used <= self.buffer.len()); // .unwrap() is ok, as only bytes, comprising a sequence of valid utf8 chars // are going to be written to `self.buffer` on `self.write_str` calls @@ -135,4 +142,15 @@ mod tests { assert_eq!("toooooo long: 400000 - 0x61", buffer.as_str()); assert_eq!(true, buffer.truncated()); } + + #[test] + pub fn test_rewrite_undisplayable_chars() { + let mut buffer = Buffer::<30>::new(); + + buffer.write_str("Prefix: "); + + buffer.write_str("\x0A\x0D"); + assert_eq!("Prefix: \x7F\x7F", buffer.as_str()); + assert_eq!(false, buffer.truncated()); + } } diff --git a/src/app_ui/sign/common/action/function_call_permission.rs b/src/app_ui/sign/common/action/function_call_permission.rs index afe6507..d006bd4 100644 --- a/src/app_ui/sign/common/action/function_call_permission.rs +++ b/src/app_ui/sign/common/action/function_call_permission.rs @@ -58,7 +58,7 @@ pub fn format<'b, 'a: 'b>( })); let methods_names_fields = ElipsisFields::from_fmt_buffer( - &function_call_perm.method_names, + &mut function_call_perm.method_names, "Method Names", &mut field_context.method_names_display_buf, ); diff --git a/src/utils/types/elipsis_fields.rs b/src/utils/types/elipsis_fields.rs index a899878..dab72ed 100644 --- a/src/utils/types/elipsis_fields.rs +++ b/src/utils/types/elipsis_fields.rs @@ -20,7 +20,7 @@ impl<'a> ElipsisFields<'a> { } pub fn from_fmt_buffer( - source: &'a Buffer, + source: &'a mut Buffer, title: &'a str, display_buf: &'a mut [u8; 20], ) -> Self {