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

View File

@ -529,7 +529,7 @@ Java_com_m2049r_xmrwallet_model_Wallet_setPassword(JNIEnv *env, jobject instance
}
JNIEXPORT jstring JNICALL
Java_com_m2049r_xmrwallet_model_Wallet_getAddress(JNIEnv *env, jobject instance) {
Java_com_m2049r_xmrwallet_model_Wallet_getAddressJ(JNIEnv *env, jobject instance) {
Bitmonero::Wallet *wallet = getHandle<Bitmonero::Wallet>(env, instance);
const char *address = wallet->address().c_str();
return env->NewStringUTF(address);

View File

@ -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();
}

View File

@ -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() {

View File

@ -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;

View File

@ -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();

View File

@ -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;