diff --git a/embed/extmod/modtrezorcrypto/modtrezorcrypto-bip32.h b/embed/extmod/modtrezorcrypto/modtrezorcrypto-bip32.h index 1542b2173..b4f94a29f 100644 --- a/embed/extmod/modtrezorcrypto/modtrezorcrypto-bip32.h +++ b/embed/extmod/modtrezorcrypto/modtrezorcrypto-bip32.h @@ -191,7 +191,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_HDNode_derive_path_obj, mod_tr STATIC mp_obj_t serialize_public_private(mp_obj_t self, bool use_public, uint32_t version) { mp_obj_HDNode_t *o = MP_OBJ_TO_PTR(self); - char xpub[XPUB_MAXLEN]; + char xpub[XPUB_MAXLEN] = {0}; int written; if (use_public) { hdnode_fill_public_key(&o->hdnode); @@ -202,7 +202,7 @@ STATIC mp_obj_t serialize_public_private(mp_obj_t self, bool use_public, uint32_ if (written <= 0) { mp_raise_ValueError("Failed to serialize"); } - return mp_obj_new_str(xpub, written - 1, false); // written includes 0 at the end + return mp_obj_new_str_copy(&mp_type_str, (const uint8_t *)xpub, written - 1); // written includes 0 at the end } /// def serialize_public(self, version: int) -> str: @@ -309,9 +309,9 @@ STATIC mp_obj_t mod_trezorcrypto_HDNode_address(mp_obj_t self, mp_obj_t version) uint32_t v = trezor_obj_get_uint(version); - char address[ADDRESS_MAXLEN]; + char address[ADDRESS_MAXLEN] = {0}; hdnode_get_address(&o->hdnode, v, address, ADDRESS_MAXLEN); - return mp_obj_new_str(address, strlen(address), false); + return mp_obj_new_str_copy(&mp_type_str, (const uint8_t *)address, strlen(address)); } STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_HDNode_address_obj, mod_trezorcrypto_HDNode_address); @@ -324,11 +324,11 @@ STATIC mp_obj_t mod_trezorcrypto_HDNode_nem_address(mp_obj_t self, mp_obj_t netw uint8_t n = trezor_obj_get_uint8(network); - char address[NEM_ADDRESS_SIZE + 1]; // + 1 for the 0 byte + char address[NEM_ADDRESS_SIZE + 1] = {0}; // + 1 for the 0 byte if (!hdnode_get_nem_address(&o->hdnode, n, address)) { mp_raise_ValueError("Failed to compute a NEM address"); } - return mp_obj_new_str_of_type(&mp_type_str, (const uint8_t *)address, strlen(address)); + return mp_obj_new_str_copy(&mp_type_str, (const uint8_t *)address, strlen(address)); } STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorcrypto_HDNode_nem_address_obj, mod_trezorcrypto_HDNode_nem_address); diff --git a/embed/extmod/modtrezorcrypto/modtrezorcrypto-bip39.h b/embed/extmod/modtrezorcrypto/modtrezorcrypto-bip39.h index e9c5dc191..e6f412f3d 100644 --- a/embed/extmod/modtrezorcrypto/modtrezorcrypto-bip39.h +++ b/embed/extmod/modtrezorcrypto/modtrezorcrypto-bip39.h @@ -34,7 +34,7 @@ STATIC mp_obj_t mod_trezorcrypto_bip39_find_word(mp_obj_t prefix) } for (const char * const *w = mnemonic_wordlist(); *w != 0; w++) { if (strncmp(*w, pfx.buf, pfx.len) == 0) { - return mp_obj_new_str(*w, strlen(*w), false); + return mp_obj_new_str(*w, strlen(*w)); } } return mp_const_none; @@ -78,7 +78,7 @@ STATIC mp_obj_t mod_trezorcrypto_bip39_generate(mp_obj_t strength) { mp_raise_ValueError("Invalid bit strength (only 128, 160, 192, 224 and 256 values are allowed)"); } const char *mnemo = mnemonic_generate(bits); - return mp_obj_new_str(mnemo, strlen(mnemo), false); + return mp_obj_new_str_copy(&mp_type_str, (const uint8_t *)mnemo, strlen(mnemo)); } STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_bip39_generate_obj, mod_trezorcrypto_bip39_generate); @@ -93,7 +93,7 @@ STATIC mp_obj_t mod_trezorcrypto_bip39_from_data(mp_obj_t data) { mp_raise_ValueError("Invalid data length (only 16, 20, 24, 28 and 32 bytes are allowed)"); } const char *mnemo = mnemonic_from_data(bin.buf, bin.len); - return mp_obj_new_str(mnemo, strlen(mnemo), false); + return mp_obj_new_str_copy(&mp_type_str, (const uint8_t *)mnemo, strlen(mnemo)); } STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorcrypto_bip39_from_data_obj, mod_trezorcrypto_bip39_from_data); diff --git a/embed/extmod/modtrezorutils/modtrezorutils.c b/embed/extmod/modtrezorutils/modtrezorutils.c index ca33c3e26..13f752553 100644 --- a/embed/extmod/modtrezorutils/modtrezorutils.c +++ b/embed/extmod/modtrezorutils/modtrezorutils.c @@ -125,7 +125,7 @@ STATIC mp_obj_t mod_trezorutils_symbol(mp_obj_t name) { if (0 == strncmp(str.buf, "GITREV", str.len)) { #define XSTR(s) STR(s) #define STR(s) #s - return mp_obj_new_str(XSTR(GITREV), strlen(XSTR(GITREV)), false); + return mp_obj_new_str(XSTR(GITREV), strlen(XSTR(GITREV))); } if (0 == strncmp(str.buf, "VERSION_MAJOR", str.len)) { return mp_obj_new_int(VERSION_MAJOR); @@ -151,7 +151,7 @@ STATIC mp_obj_t mod_trezorutils_model(void) { #elif defined TREZOR_MODEL_EMU model = "EMU"; #endif - return model ? mp_obj_new_str(model, strlen(model), false) : mp_const_none; + return model ? mp_obj_new_str(model, strlen(model)) : mp_const_none; } STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorutils_model_obj, mod_trezorutils_model); diff --git a/embed/unix/main.c b/embed/unix/main.c index 671d978a5..c1c51da07 100644 --- a/embed/unix/main.c +++ b/embed/unix/main.c @@ -537,7 +537,7 @@ MP_NOINLINE int main_(int argc, char **argv) { return usage(argv); } mp_obj_t import_args[4]; - import_args[0] = mp_obj_new_str(argv[a + 1], strlen(argv[a + 1]), false); + import_args[0] = mp_obj_new_str(argv[a + 1], strlen(argv[a + 1])); import_args[1] = import_args[2] = mp_const_none; // Ask __import__ to handle imported module specially - set its __name__ // to __main__, and also return this leaf module, not top-level package