What changed, and why it matters
This commit fixes a user-interface behavior on a cryptocurrency hardware wallet. When a user views the raw data of an Ethereum transaction, the device now temporarily prevents the screen from locking. Without the fix, the screen could lock while the user was reading the raw data, which could be annoying or cause the user to approve a transaction without fully reviewing it. The change itself is small and defensive, not a clear-cut security vulnerability fix.
Treat as a minor hardening or UX fix. Review whether other sensitive review screens (e.g., transaction confirmation, message signing) similarly disable auto-lock to ensure consistent behavior. No urgent security response is indicated by this diff alone.
Security signals we found
UI/UX hardening: prevents auto-lock during sensitive transaction review step
No cryptographic, memory-safety, or authentication change present in diff
Change is localized to Ethereum raw-data display callback
Evidence from the diff
In src/ui/gui_chain/multi/web3/gui_eth.c, the EthContractCheckRawDataCallback now calls SetLockScreen(false) before displaying a hintbox containing the raw transaction input data, and calls ClearLockScreenTime() and SetLockScreen(true) after scheduling the raw-data parse delay. This prevents the device’s auto-lock from engaging while the user is inspecting raw transaction data. The diff does not show any cryptographic, parsing, or memory-safety change.
Changed components
src/ui/gui_chain/multi/web3/gui_eth.cEthereum transaction raw-data review screenDevice lock-screen/automatic-lock behaviorInspect captured patch +3 / −0
diff --git a/src/ui/gui_chain/multi/web3/gui_eth.c b/src/ui/gui_chain/multi/web3/gui_eth.c
index 50c9a8e..477f84c 100644
--- a/src/ui/gui_chain/multi/web3/gui_eth.c
+++ b/src/ui/gui_chain/multi/web3/gui_eth.c
@@ -1646,11 +1646,14 @@ void EthContractCheckRawData(lv_event_t *e)
void EthContractCheckRawDataCallback(void)
{
+ SetLockScreen(false);
char *rawData = ((TransactionParseResult_DisplayETH *)g_parseResult)->data->detail->input;
g_contractRawDataHintbox = GuiCreateContractRawDataHintbox("Raw Data", rawData);
lv_obj_t *rightBtn = GuiGetHintBoxRightBtn(g_contractRawDataHintbox);
lv_obj_add_event_cb(rightBtn, CloseHintBoxHandler, LV_EVENT_CLICKED, &g_contractRawDataHintbox);
GuiModelTransactionParseRawDataDelay();
+ ClearLockScreenTime();
+ SetLockScreen(true);
}
bool GetEthContractFromExternal(char *address, char *selectorId, uint64_t chainId, char *inputData)
Why this scored 29/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.