fix: getWlptr failing nullcheck in hardware monero wallets (#2149)
now null wptr on listener calls will be handled gracefully Co-authored-by: Omar Hatem <omarh.ismail1@gmail.com>
cyan committed
Apr 3, 2025 at 03:34 UTC
7a5999d90ef798e41c4eb146e4a7351979ecc6e0
2 files changed
+10
-6
cw_monero/lib/api/account_list.dart
+2
-1
@@ -7,7 +7,8 @@ bool get isViewOnly => int.tryParse(monero.Wallet_secretSpendKey(wptr!)) == 0;
7
int _wlptrForW = 0;
8
monero.WalletListener? _wlptr = null;
9
10
-monero.WalletListener getWlptr() {
10
+monero.WalletListener? getWlptr() {
11
+ if (wptr == null) return null;
12
if (wptr!.address == _wlptrForW) return _wlptr!;
13
_wlptrForW = wptr!.address;
14
_wlptr = monero.MONERO_cw_getWalletListener(wptr!);
cw_monero/lib/api/wallet.dart
+8
-5
@@ -2,7 +2,6 @@ import 'dart:async';
2
import 'dart:ffi';
3
import 'dart:isolate';
4
5
-import 'package:cw_core/root_dir.dart';
5
import 'package:cw_core/utils/print_verbose.dart';
6
import 'package:cw_monero/api/account_list.dart';
7
import 'package:cw_monero/api/exceptions/setup_wallet_exception.dart';
@@ -22,14 +21,18 @@ int getSyncingHeight() {
21
}
22
23
bool isNeededToRefresh() {
25
- final ret = monero.MONERO_cw_WalletListener_isNeedToRefresh(getWlptr());
26
- monero.MONERO_cw_WalletListener_resetNeedToRefresh(getWlptr());
24
+ final wlptr = getWlptr();
25
+ if (wlptr == null) return false;
26
+ final ret = monero.MONERO_cw_WalletListener_isNeedToRefresh(wlptr);
27
+ monero.MONERO_cw_WalletListener_resetNeedToRefresh(wlptr);
28
return ret;
29
}
30
31
bool isNewTransactionExist() {
31
- final ret = monero.MONERO_cw_WalletListener_isNewTransactionExist(getWlptr());
32
- monero.MONERO_cw_WalletListener_resetIsNewTransactionExist(getWlptr());
32
+ final wlptr = getWlptr();
33
+ if (wlptr == null) return false;
34
+ final ret = monero.MONERO_cw_WalletListener_isNewTransactionExist(wlptr);
35
+ monero.MONERO_cw_WalletListener_resetIsNewTransactionExist(wlptr);
36
return ret;
37
}
38