WebXDC file sent with no thread is just a file

Stephen Paul Weber created

Don't try to get updates from the non-thread and crash.

Change summary

src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java | 5 
src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java   | 2 
2 files changed, 6 insertions(+), 1 deletion(-)

Detailed changes

src/main/java/eu/siacs/conversations/persistance/DatabaseBackend.java 🔗

@@ -867,6 +867,11 @@ public class DatabaseBackend extends SQLiteOpenHelper {
     }
 
     public WebxdcUpdate findLastWebxdcUpdate(Message message) {
+        if (message.getThread() == null) {
+            Log.w(Config.LOGTAG, "WebXDC message with no thread!");
+            return null;
+        }
+
         SQLiteDatabase db = this.getReadableDatabase();
         String[] selectionArgs = {message.getConversation().getUuid(), message.getThread().getContent()};
         Cursor cursor = db.query("cheogram.webxdc_updates", null,

src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java 🔗

@@ -1040,7 +1040,7 @@ public class MessageAdapter extends ArrayAdapter<Message> {
                 displayMediaPreviewMessage(viewHolder, message, darkBackground, type);
             } else if (message.getFileParams().runtime > 0) {
                 displayAudioMessage(viewHolder, message, darkBackground, type);
-            } else if ("application/xdc+zip".equals(message.getFileParams().getMediaType()) && message.getConversation() instanceof Conversation) {
+            } else if ("application/xdc+zip".equals(message.getFileParams().getMediaType()) && message.getConversation() instanceof Conversation && message.getThread() != null) {
                 displayWebxdcMessage(viewHolder, message, darkBackground, type);
             } else {
                 displayOpenableMessage(viewHolder, message, darkBackground, type);