Die if getAddress() is not valid (#73)

mitigates serious effects of issue #72 by crashing - does not solve the root cause which is still unknown.
This commit is contained in:
m2049r
2017-09-19 21:40:17 +02:00
committed by GitHub
parent c4f9e8cf58
commit b00734a0d6
6 changed files with 16 additions and 16 deletions
@@ -34,6 +34,7 @@ import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.m2049r.xmrwallet.model.Wallet;
import com.m2049r.xmrwallet.model.WalletManager;
import com.m2049r.xmrwallet.util.Helper;
@@ -278,8 +279,7 @@ public class GenerateFragment extends Fragment {
private boolean addressOk() {
String address = etWalletAddress.getText().toString();
boolean testnet = WalletManager.getInstance().isTestNet();
return ((address.length() == 95) && ((testnet ? "9A" : "4").indexOf(address.charAt(0)) >= 0));
return Wallet.isAddressValid(address, WalletManager.getInstance().isTestNet());
}
private boolean viewKeyOk() {
@@ -295,7 +295,7 @@ public class GenerateFragment extends Fragment {
private void generateWallet() {
String name = etWalletName.getText().toString();
if (name.length() == 0) return;
if (name.charAt(0)=='.') {
if (name.charAt(0) == '.') {
Toast.makeText(getActivity(), getString(R.string.generate_wallet_dot), Toast.LENGTH_LONG).show();
etWalletName.requestFocus();
}
@@ -277,7 +277,7 @@ public class SendFragment extends Fragment {
private boolean addressOk() {
String address = etAddress.getText().toString();
return Helper.isAddressOk(address, WalletManager.getInstance().isTestNet());
return Wallet.isAddressValid(address, WalletManager.getInstance().isTestNet());
}
private boolean amountOk() {
@@ -697,7 +697,7 @@ public class WalletActivity extends AppCompatActivity implements WalletFragment.
address = null;
}
if (Helper.isAddressOk(address, WalletManager.getInstance().isTestNet())) {
if (Wallet.isAddressValid(address, WalletManager.getInstance().isTestNet())) {
return new BarcodeData(address, paymentId, amount);
}
return null;
@@ -68,7 +68,16 @@ public class Wallet {
public native boolean setPassword(String password);
public native String getAddress();
public String getAddress() {
String address = getAddressJ();
if (!Wallet.isAddressValid(address, WalletManager.getInstance().isTestNet())) {
// just die!
throw new IllegalStateException("Wallet returned invalid address!");
}
return address;
}
private native String getAddressJ();
public native String getPath();
@@ -144,15 +144,6 @@ public class Helper {
act.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
}
static public boolean isAddressOk(String address, boolean testnet) {
if (address == null) return false;
if (testnet) {
return ((address.length() == 95) && ("9A".indexOf(address.charAt(0)) >= 0));
} else {
return ((address.length() == 95) && ("4".indexOf(address.charAt(0)) >= 0));
}
}
static public String getDisplayAmount(long amount) {
String s = Wallet.getDisplayAmount(amount);
int lastZero = 0;