diff --git a/src_features/signMessageEIP712/entrypoint.c b/src_features/signMessageEIP712/entrypoint.c index 5304391..6bbabd1 100644 --- a/src_features/signMessageEIP712/entrypoint.c +++ b/src_features/signMessageEIP712/entrypoint.c @@ -59,7 +59,7 @@ bool handle_eip712_struct_def(const uint8_t *const apdu_buf) switch (apdu_buf[OFFSET_P2]) { case P2_NAME: - ret = set_struct_name(apdu_buf); + ret = set_struct_name(apdu_buf[OFFSET_LC], &apdu_buf[OFFSET_CDATA]); break; case P2_FIELD: ret = set_struct_field(apdu_buf); diff --git a/src_features/signMessageEIP712/typed_data.c b/src_features/signMessageEIP712/typed_data.c index 3cd5fd0..d2d05d4 100644 --- a/src_features/signMessageEIP712/typed_data.c +++ b/src_features/signMessageEIP712/typed_data.c @@ -286,12 +286,12 @@ static inline const uint8_t *get_struct(const uint8_t *const ptr, } // -bool set_struct_name(const uint8_t *const data) +bool set_struct_name(uint8_t length, const uint8_t *const name) { uint8_t *length_ptr; char *name_ptr; - if ((data == NULL) || (eip712_context == NULL)) + if ((name == NULL) || (eip712_context == NULL)) { return false; } @@ -304,15 +304,15 @@ bool set_struct_name(const uint8_t *const data) apdu_response_code = APDU_RESPONSE_INSUFFICIENT_MEMORY; return false; } - *length_ptr = data[OFFSET_LC]; + *length_ptr = length; // copy name - if ((name_ptr = mem_alloc(sizeof(char) * data[OFFSET_LC])) == NULL) + if ((name_ptr = mem_alloc(sizeof(char) * length)) == NULL) { apdu_response_code = APDU_RESPONSE_INSUFFICIENT_MEMORY; return false; } - memmove(name_ptr, &data[OFFSET_CDATA], data[OFFSET_LC]); + memmove(name_ptr, name, length); // initialize number of fields if ((eip712_context->current_struct_fields_array = mem_alloc(sizeof(uint8_t))) == NULL) diff --git a/src_features/signMessageEIP712/typed_data.h b/src_features/signMessageEIP712/typed_data.h index f367959..aaa8dbe 100644 --- a/src_features/signMessageEIP712/typed_data.h +++ b/src_features/signMessageEIP712/typed_data.h @@ -61,7 +61,7 @@ const uint8_t *get_structs_array(const uint8_t *ptr, uint8_t *const length); const uint8_t *get_structn(const uint8_t *const ptr, const char *const name_ptr, const uint8_t name_length); -bool set_struct_name(const uint8_t *const data); +bool set_struct_name(uint8_t length, const uint8_t *const name); bool set_struct_field(const uint8_t *const data); #endif // HAVE_EIP712_FULL_SUPPORT