Skip to content

Commit edb60f0

Browse files
author
Jamie C. Driver
committed
memory: place large multisig and descriptor structs onto the heap
1 parent b628772 commit edb60f0

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

main/process/get_receive_address.c

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "../ui.h"
1010
#include "../utils/address.h"
1111
#include "../utils/cbor_rpc.h"
12+
#include "../utils/malloc_ext.h"
1213
#include "../utils/network.h"
1314
#include "../wallet.h"
1415

@@ -56,9 +57,11 @@ void get_receive_address_process(void* process_ptr)
5657

5758
if (rpc_has_field_data("multisig_name", &params)) {
5859
// Load multisig data record
59-
multisig_data_t multisig_data;
60+
multisig_data_t* const multisig_data = JADE_MALLOC(sizeof(multisig_data_t));
61+
jade_process_free_on_exit(process, multisig_data);
62+
6063
char multisig_name[MAX_MULTISIG_NAME_SIZE];
61-
if (!params_load_multisig(&params, multisig_name, sizeof(multisig_name), &multisig_data, &errmsg)) {
64+
if (!params_load_multisig(&params, multisig_name, sizeof(multisig_name), multisig_data, &errmsg)) {
6265
jade_process_reject_message(process, CBOR_RPC_BAD_PARAMETERS, errmsg, NULL);
6366
goto cleanup;
6467
}
@@ -67,23 +70,23 @@ void get_receive_address_process(void* process_ptr)
6770
const bool is_change = false;
6871
size_t written = 0;
6972
uint8_t pubkeys[MAX_ALLOWED_SIGNERS * EC_PUBLIC_KEY_LEN]; // Sufficient
70-
if (!params_multisig_pubkeys(is_change, &params, &multisig_data, pubkeys, sizeof(pubkeys), &written,
71-
warning_msg, sizeof(warning_msg), &errmsg)) {
73+
if (!params_multisig_pubkeys(is_change, &params, multisig_data, pubkeys, sizeof(pubkeys), &written, warning_msg,
74+
sizeof(warning_msg), &errmsg)) {
7275
jade_process_reject_message(process, CBOR_RPC_BAD_PARAMETERS, errmsg, NULL);
7376
goto cleanup;
7477
}
7578

7679
// Build a script pubkey for the passed parameters
77-
if (!wallet_build_multisig_script(multisig_data.variant, multisig_data.sorted, multisig_data.threshold, pubkeys,
78-
written, script, sizeof(script), &script_len)) {
80+
if (!wallet_build_multisig_script(multisig_data->variant, multisig_data->sorted, multisig_data->threshold,
81+
pubkeys, written, script, sizeof(script), &script_len)) {
7982
jade_process_reject_message(
8083
process, CBOR_RPC_BAD_PARAMETERS, "Failed to generate valid multisig script", NULL);
8184
goto cleanup;
8285
}
8386

8487
if (confidential) {
8588
if (!multisig_get_master_blinding_key(
86-
&multisig_data, multisig_master_blinding_key, sizeof(multisig_master_blinding_key), &errmsg)) {
89+
multisig_data, multisig_master_blinding_key, sizeof(multisig_master_blinding_key), &errmsg)) {
8790
jade_process_reject_message(process, CBOR_RPC_BAD_PARAMETERS, errmsg, NULL);
8891
goto cleanup;
8992
}
@@ -99,9 +102,11 @@ void get_receive_address_process(void* process_ptr)
99102
}
100103

101104
// Load descriptor record
102-
descriptor_data_t descriptor;
105+
descriptor_data_t* const descriptor = JADE_MALLOC(sizeof(descriptor_data_t));
106+
jade_process_free_on_exit(process, descriptor);
107+
103108
char descriptor_name[MAX_DESCRIPTOR_NAME_SIZE];
104-
if (!params_load_descriptor(&params, descriptor_name, sizeof(descriptor_name), &descriptor, &errmsg)) {
109+
if (!params_load_descriptor(&params, descriptor_name, sizeof(descriptor_name), descriptor, &errmsg)) {
105110
jade_process_reject_message(process, CBOR_RPC_BAD_PARAMETERS, errmsg, NULL);
106111
goto cleanup;
107112
}
@@ -116,7 +121,7 @@ void get_receive_address_process(void* process_ptr)
116121
}
117122

118123
// Build a script pubkey for the passed parameters
119-
if (!wallet_build_descriptor_script(network_id, descriptor_name, &descriptor, branch, pointer, script,
124+
if (!wallet_build_descriptor_script(network_id, descriptor_name, descriptor, branch, pointer, script,
120125
sizeof(script), &script_len, &errmsg)) {
121126
jade_process_reject_message(
122127
process, CBOR_RPC_BAD_PARAMETERS, "Failed to generate valid descriptor script", NULL);

0 commit comments

Comments
 (0)