Don't crash on unexpected deserialization error

pull/537/head
nielsandriesse 4 years ago
parent bb850cf99e
commit c5e0589751

@ -21,7 +21,7 @@ interface Job {
fun getFactoryKey(): String
interface Factory<T : Job> {
fun create(data: Data): T
fun create(data: Data): T?
}
}

@ -104,17 +104,29 @@ class MessageSendJob(val message: Message, val destination: Destination) : Job {
class Factory : Job.Factory<MessageSendJob> {
override fun create(data: Data): MessageSendJob {
override fun create(data: Data): MessageSendJob? {
val serializedMessage = data.getByteArray(MESSAGE_KEY)
val serializedDestination = data.getByteArray(DESTINATION_KEY)
val kryo = Kryo()
// Message
val messageInput = Input(serializedMessage)
val message = kryo.readClassAndObject(messageInput) as Message
val message: Message
try {
message = kryo.readClassAndObject(messageInput) as Message
} catch (e: Exception) {
Log.e("Loki", "Couldn't deserialize message send job.", e)
return null
}
messageInput.close()
// Destination
val destinationInput = Input(serializedDestination)
val destination = kryo.readClassAndObject(destinationInput) as Destination
val destination: Destination
try {
destination = kryo.readClassAndObject(destinationInput) as Destination
} catch (e: Exception) {
Log.e("Loki", "Couldn't deserialize message send job.", e)
return null
}
destinationInput.close()
// Return
return MessageSendJob(message, destination)

Loading…
Cancel
Save