react-native-nitro-ark 0.0.77-rc.6 → 0.0.77-rc.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -32,6 +32,7 @@ void ThrowJavaException(JNIEnv* env, const char* message) {
32
32
  jclass exClass = env->FindClass("java/lang/RuntimeException");
33
33
  if (exClass != nullptr) {
34
34
  env->ThrowNew(exClass, message);
35
+ env->DeleteLocalRef(exClass);
35
36
  }
36
37
  __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, "Throwing Java exception: %s", message);
37
38
  }
@@ -88,18 +89,30 @@ jobject MakeArrayList(JNIEnv* env, const std::vector<std::string>& elements) {
88
89
  return nullptr;
89
90
  jmethodID arrayListCtor = env->GetMethodID(arrayListClass, "<init>", "()V");
90
91
  jmethodID arrayListAdd = env->GetMethodID(arrayListClass, "add", "(Ljava/lang/Object;)Z");
91
- if (arrayListCtor == nullptr || arrayListAdd == nullptr)
92
+ if (arrayListCtor == nullptr || arrayListAdd == nullptr) {
93
+ env->DeleteLocalRef(arrayListClass);
92
94
  return nullptr;
95
+ }
93
96
 
94
97
  jobject arrayListObj = env->NewObject(arrayListClass, arrayListCtor);
95
- if (arrayListObj == nullptr)
98
+ if (arrayListObj == nullptr) {
99
+ env->DeleteLocalRef(arrayListClass);
96
100
  return nullptr;
101
+ }
97
102
 
98
103
  for (const auto& element : elements) {
99
104
  jstring jStr = env->NewStringUTF(element.c_str());
100
- if (jStr != nullptr) {
101
- env->CallBooleanMethod(arrayListObj, arrayListAdd, jStr);
102
- env->DeleteLocalRef(jStr);
105
+ if (jStr == nullptr) {
106
+ env->DeleteLocalRef(arrayListObj);
107
+ env->DeleteLocalRef(arrayListClass);
108
+ return nullptr;
109
+ }
110
+ env->CallBooleanMethod(arrayListObj, arrayListAdd, jStr);
111
+ env->DeleteLocalRef(jStr);
112
+ if (env->ExceptionCheck()) {
113
+ env->DeleteLocalRef(arrayListObj);
114
+ env->DeleteLocalRef(arrayListClass);
115
+ return nullptr;
103
116
  }
104
117
  }
105
118
  env->DeleteLocalRef(arrayListClass);
@@ -112,8 +125,10 @@ jobject MakeRoundStatusResult(JNIEnv* env, const bark_cxx::RoundStatus& status)
112
125
  return nullptr;
113
126
  jmethodID ctor =
114
127
  env->GetMethodID(cls, "<init>", "(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;ZZ)V");
115
- if (ctor == nullptr)
128
+ if (ctor == nullptr) {
129
+ env->DeleteLocalRef(cls);
116
130
  return nullptr;
131
+ }
117
132
 
118
133
  std::string statusStr(status.status.data(), status.status.length());
119
134
  std::string fundingTxid(status.funding_txid.data(), status.funding_txid.length());
@@ -128,14 +143,43 @@ jobject MakeRoundStatusResult(JNIEnv* env, const bark_cxx::RoundStatus& status)
128
143
  jobject txidList = MakeArrayList(env, txids);
129
144
 
130
145
  jstring jStatus = env->NewStringUTF(statusStr.c_str());
131
- jstring jFundingTxid = fundingTxid.empty() ? nullptr : env->NewStringUTF(fundingTxid.c_str());
132
- jstring jError = error.empty() ? nullptr : env->NewStringUTF(error.c_str());
146
+ if (jStatus == nullptr) {
147
+ if (txidList)
148
+ env->DeleteLocalRef(txidList);
149
+ env->DeleteLocalRef(cls);
150
+ return nullptr;
151
+ }
152
+
153
+ jstring jFundingTxid = nullptr;
154
+ if (!fundingTxid.empty()) {
155
+ jFundingTxid = env->NewStringUTF(fundingTxid.c_str());
156
+ if (jFundingTxid == nullptr) {
157
+ env->DeleteLocalRef(jStatus);
158
+ if (txidList)
159
+ env->DeleteLocalRef(txidList);
160
+ env->DeleteLocalRef(cls);
161
+ return nullptr;
162
+ }
163
+ }
164
+
165
+ jstring jError = nullptr;
166
+ if (!error.empty()) {
167
+ jError = env->NewStringUTF(error.c_str());
168
+ if (jError == nullptr) {
169
+ env->DeleteLocalRef(jStatus);
170
+ if (jFundingTxid)
171
+ env->DeleteLocalRef(jFundingTxid);
172
+ if (txidList)
173
+ env->DeleteLocalRef(txidList);
174
+ env->DeleteLocalRef(cls);
175
+ return nullptr;
176
+ }
177
+ }
133
178
 
134
179
  jobject result =
135
180
  env->NewObject(cls, ctor, jStatus, jFundingTxid, txidList, jError, status.is_final, status.is_success);
136
181
 
137
- if (jStatus)
138
- env->DeleteLocalRef(jStatus);
182
+ env->DeleteLocalRef(jStatus);
139
183
  if (jFundingTxid)
140
184
  env->DeleteLocalRef(jFundingTxid);
141
185
  if (jError)
@@ -151,21 +195,31 @@ jobject MakeKeyPairResult(JNIEnv* env, const bark_cxx::KeyPairResult& keypair) {
151
195
  if (cls == nullptr)
152
196
  return nullptr;
153
197
  jmethodID ctor = env->GetMethodID(cls, "<init>", "(Ljava/lang/String;Ljava/lang/String;)V");
154
- if (ctor == nullptr)
198
+ if (ctor == nullptr) {
199
+ env->DeleteLocalRef(cls);
155
200
  return nullptr;
201
+ }
156
202
 
157
203
  std::string pub(keypair.public_key.data(), keypair.public_key.length());
158
204
  std::string sec(keypair.secret_key.data(), keypair.secret_key.length());
159
205
 
160
206
  jstring jPub = env->NewStringUTF(pub.c_str());
207
+ if (jPub == nullptr) {
208
+ env->DeleteLocalRef(cls);
209
+ return nullptr;
210
+ }
211
+
161
212
  jstring jSec = env->NewStringUTF(sec.c_str());
213
+ if (jSec == nullptr) {
214
+ env->DeleteLocalRef(jPub);
215
+ env->DeleteLocalRef(cls);
216
+ return nullptr;
217
+ }
162
218
 
163
219
  jobject result = env->NewObject(cls, ctor, jPub, jSec);
164
220
 
165
- if (jPub)
166
- env->DeleteLocalRef(jPub);
167
- if (jSec)
168
- env->DeleteLocalRef(jSec);
221
+ env->DeleteLocalRef(jPub);
222
+ env->DeleteLocalRef(jSec);
169
223
  env->DeleteLocalRef(cls);
170
224
  return result;
171
225
  }
@@ -175,25 +229,41 @@ jobject MakeBolt11Invoice(JNIEnv* env, const bark_cxx::Bolt11Invoice& invoice) {
175
229
  if (cls == nullptr)
176
230
  return nullptr;
177
231
  jmethodID ctor = env->GetMethodID(cls, "<init>", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
178
- if (ctor == nullptr)
232
+ if (ctor == nullptr) {
233
+ env->DeleteLocalRef(cls);
179
234
  return nullptr;
235
+ }
180
236
 
181
237
  std::string bolt11(invoice.bolt11_invoice.data(), invoice.bolt11_invoice.length());
182
238
  std::string paymentSecret(invoice.payment_secret.data(), invoice.payment_secret.length());
183
239
  std::string paymentHash(invoice.payment_hash.data(), invoice.payment_hash.length());
184
240
 
185
241
  jstring jBolt11 = env->NewStringUTF(bolt11.c_str());
242
+ if (jBolt11 == nullptr) {
243
+ env->DeleteLocalRef(cls);
244
+ return nullptr;
245
+ }
246
+
186
247
  jstring jSecret = env->NewStringUTF(paymentSecret.c_str());
248
+ if (jSecret == nullptr) {
249
+ env->DeleteLocalRef(jBolt11);
250
+ env->DeleteLocalRef(cls);
251
+ return nullptr;
252
+ }
253
+
187
254
  jstring jHash = env->NewStringUTF(paymentHash.c_str());
255
+ if (jHash == nullptr) {
256
+ env->DeleteLocalRef(jBolt11);
257
+ env->DeleteLocalRef(jSecret);
258
+ env->DeleteLocalRef(cls);
259
+ return nullptr;
260
+ }
188
261
 
189
262
  jobject result = env->NewObject(cls, ctor, jBolt11, jSecret, jHash);
190
263
 
191
- if (jBolt11)
192
- env->DeleteLocalRef(jBolt11);
193
- if (jSecret)
194
- env->DeleteLocalRef(jSecret);
195
- if (jHash)
196
- env->DeleteLocalRef(jHash);
264
+ env->DeleteLocalRef(jBolt11);
265
+ env->DeleteLocalRef(jSecret);
266
+ env->DeleteLocalRef(jHash);
197
267
  env->DeleteLocalRef(cls);
198
268
  return result;
199
269
  }
@@ -242,7 +312,7 @@ JNIEXPORT void JNICALL Java_com_margelo_nitro_nitroark_NitroArkNative_loadWallet
242
312
  opts.mnemonic = mnemonic;
243
313
 
244
314
  auto birthday_height = GetOptionalInt(env, jBirthdayHeight);
245
- thread_local uint32_t birthday_height_val = 0;
315
+ uint32_t birthday_height_val = 0;
246
316
  if (birthday_height.has_value()) {
247
317
  birthday_height_val = static_cast<uint32_t>(birthday_height.value());
248
318
  opts.birthday_height = &birthday_height_val;
@@ -268,13 +338,13 @@ JNIEXPORT void JNICALL Java_com_margelo_nitro_nitroark_NitroArkNative_loadWallet
268
338
 
269
339
  opts.config = config;
270
340
 
341
+ std::string birthday_height_str = opts.birthday_height != nullptr ? std::to_string(*opts.birthday_height) : "null";
271
342
  __android_log_print(ANDROID_LOG_INFO, LOG_TAG,
272
343
  "load_wallet(native) datadir=%s regtest=%s signet=%s bitcoin=%s birthday_height=%s ark=%s "
273
344
  "esplora=%s bitcoind=%s",
274
345
  datadir.c_str(), opts.regtest ? "true" : "false", opts.signet ? "true" : "false",
275
- opts.bitcoin ? "true" : "false",
276
- opts.birthday_height != nullptr ? std::to_string(*opts.birthday_height).c_str() : "null",
277
- config.ark.c_str(), config.esplora.c_str(), config.bitcoind.c_str());
346
+ opts.bitcoin ? "true" : "false", birthday_height_str.c_str(), config.ark.c_str(),
347
+ config.esplora.c_str(), config.bitcoind.c_str());
278
348
 
279
349
  bark_cxx::load_wallet(datadir, opts);
280
350
  __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "load_wallet(native) success");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-nitro-ark",
3
- "version": "0.0.77-rc.6",
3
+ "version": "0.0.77-rc.7",
4
4
  "description": "Pure C++ Nitro Modules for Ark client",
5
5
  "source": "./src/index.tsx",
6
6
  "main": "./lib/module/index.js",