0.5.3 crashes when updating database
Created by: mikeryan
Device: Nexus 4 Version: SMSSecure 0.5.3
After upgrading to 0.5.3 and entering my password the app attempts to update the database. About 80% of the way through this process it crashes. Backtrace below:
E/AndroidRuntime( 2868): FATAL EXCEPTION: AsyncTask #3
E/AndroidRuntime( 2868): Process: org.smssecure.smssecure, PID: 2868
E/AndroidRuntime( 2868): java.lang.RuntimeException: An error occured while executing doInBackground()
E/AndroidRuntime( 2868): at android.os.AsyncTask$3.done(AsyncTask.java:300)
E/AndroidRuntime( 2868): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
E/AndroidRuntime( 2868): at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
E/AndroidRuntime( 2868): at java.util.concurrent.FutureTask.run(FutureTask.java:242)
E/AndroidRuntime( 2868): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
E/AndroidRuntime( 2868): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
E/AndroidRuntime( 2868): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
E/AndroidRuntime( 2868): at java.lang.Thread.run(Thread.java:818)
E/AndroidRuntime( 2868): Caused by: java.lang.NullPointerException: Input string was null.
E/AndroidRuntime( 2868): at org.smssecure.smssecure.util.Base64.decode(Base64.java:1274)
E/AndroidRuntime( 2868): at org.smssecure.smssecure.util.Base64.decode(Base64.java:1244)
E/AndroidRuntime( 2868): at org.smssecure.smssecure.crypto.MasterCipher.decodeAndDecryptBytes(MasterCipher.java:144)
E/AndroidRuntime( 2868): at org.smssecure.smssecure.crypto.MasterCipher.decryptBody(MasterCipher.java:82)
E/AndroidRuntime( 2868): at org.smssecure.smssecure.database.DatabaseFactory.onApplicationLevelUpgrade(DatabaseFactory.java:220)
E/AndroidRuntime( 2868): at org.smssecure.smssecure.DatabaseUpgradeActivity$DatabaseUpgradeTask.doInBackground(DatabaseUpgradeActivity.java:145)
E/AndroidRuntime( 2868): at org.smssecure.smssecure.DatabaseUpgradeActivity$DatabaseUpgradeTask.doInBackground(DatabaseUpgradeActivity.java:128)
E/AndroidRuntime( 2868): at android.os.AsyncTask$2.call(AsyncTask.java:288)
E/AndroidRuntime( 2868): at java.util.concurrent.FutureTask.run(FutureTask.java:237)
E/AndroidRuntime( 2868): ... 4 more
The error is in DatabaseFactory.onApplicationLevelUpgrade()
:
In this line of code:
String body = masterCipher.decryptBody(smsCursor.getString(smsCursor.getColumnIndexOrThrow("body")));
The function smsCursor.getString(smsCursor.getColumnIndexOrThrow("body"))
returns NULL
. It looks like if you check for that and skip the record the issue should be mitigated.
Note that this is distinct from #82 (closed) and #61 (closed)