Fix invalid attachment data during sms export.

main
Cody Henthorne 2023-02-15 15:32:34 -05:00 zatwierdzone przez Greyson Parrelli
rodzic c75a9b577d
commit 2b0e9783a7
5 zmienionych plików z 20 dodań i 0 usunięć

Wyświetl plik

@ -5300,6 +5300,10 @@ public class MessageTable extends DatabaseTable implements MessageTypes, Recipie
} }
} }
public MessageId getCurrentId() {
return new MessageId(CursorUtil.requireLong(cursor, ID));
}
@Override @Override
public @NonNull MessageExportState getMessageExportStateForCurrentRecord() { public @NonNull MessageExportState getMessageExportStateForCurrentRecord() {
byte[] messageExportState = CursorUtil.requireBlob(cursor, MessageTable.EXPORT_STATE); byte[] messageExportState = CursorUtil.requireBlob(cursor, MessageTable.EXPORT_STATE);

Wyświetl plik

@ -1,5 +1,6 @@
package org.thoughtcrime.securesms.exporter package org.thoughtcrime.securesms.exporter
import org.json.JSONException
import org.signal.core.util.logging.Log import org.signal.core.util.logging.Log
import org.signal.smsexporter.ExportableMessage import org.signal.smsexporter.ExportableMessage
import org.signal.smsexporter.SmsExportState import org.signal.smsexporter.SmsExportState
@ -92,6 +93,11 @@ class SignalSmsExportReader(
throw NoSuchElementException() throw NoSuchElementException()
} }
} catch (e: Throwable) { } catch (e: Throwable) {
if (e.cause is JSONException) {
Log.w(TAG, "Error processing attachment json, skipping message.", e)
return ExportableMessage.Skip(messageReader!!.currentId)
}
Log.w(TAG, "Error processing message: isMms: ${record?.isMms} type: ${record?.type}") Log.w(TAG, "Error processing message: isMms: ${record?.isMms} type: ${record?.type}")
throw e throw e
} }

Wyświetl plik

@ -180,6 +180,7 @@ class SignalSmsExportService : SmsExportService() {
val messageId: Any = when (this) { val messageId: Any = when (this) {
is ExportableMessage.Mms<*> -> id is ExportableMessage.Mms<*> -> id
is ExportableMessage.Sms<*> -> id is ExportableMessage.Sms<*> -> id
is ExportableMessage.Skip<*> -> id
} }
if (messageId is MessageId) { if (messageId is MessageId) {

Wyświetl plik

@ -61,4 +61,9 @@ sealed interface ExportableMessage {
} }
} }
} }
data class Skip<out ID : Any>(
val id: ID,
override val exportState: SmsExportState = SmsExportState()
) : ExportableMessage
} }

Wyświetl plik

@ -80,6 +80,10 @@ abstract class SmsExportService : Service() {
val successful = when (message) { val successful = when (message) {
is ExportableMessage.Sms<*> -> exportSms(exportState, message) is ExportableMessage.Sms<*> -> exportSms(exportState, message)
is ExportableMessage.Mms<*> -> exportMms(exportState, message) is ExportableMessage.Mms<*> -> exportMms(exportState, message)
is ExportableMessage.Skip<*> -> {
onMessageExportSucceeded(message)
true
}
} }
if (!successful) { if (!successful) {