From 31cfe074ea6c2974e738c7c39c7002f47199b06e Mon Sep 17 00:00:00 2001 From: Khalid Nasralla Date: Tue, 10 Dec 2024 18:17:07 +0100 Subject: [PATCH] PAINTROID-760 Crash: Buffer underflow --- Paintroid/build.gradle | 4 +-- .../serialization/CommandSerializer.kt | 36 ++++++++++--------- build.gradle | 2 +- colorpicker/build.gradle | 2 -- gradle/wrapper/gradle-wrapper.properties | 2 +- 5 files changed, 23 insertions(+), 23 deletions(-) diff --git a/Paintroid/build.gradle b/Paintroid/build.gradle index d049eb3f79..6500b96412 100644 --- a/Paintroid/build.gradle +++ b/Paintroid/build.gradle @@ -68,8 +68,6 @@ android { minSdkVersion rootProject.ext.androidMinSdkVersion targetSdkVersion rootProject.ext.androidTargetSdkVersion testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' - versionCode rootProject.ext.androidVersionCode - versionName rootProject.ext.androidVersionName } compileOptions { @@ -125,7 +123,7 @@ dependencies { implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.8' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.8' implementation 'androidx.exifinterface:exifinterface:1.3.2' - implementation 'com.esotericsoftware:kryo:5.5.0' + implementation 'com.esotericsoftware:kryo:5.6.2' implementation 'id.zelory:compressor:2.1.1' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' diff --git a/Paintroid/src/main/java/org/catrobat/paintroid/command/serialization/CommandSerializer.kt b/Paintroid/src/main/java/org/catrobat/paintroid/command/serialization/CommandSerializer.kt index 13a0df7452..d4a4028984 100644 --- a/Paintroid/src/main/java/org/catrobat/paintroid/command/serialization/CommandSerializer.kt +++ b/Paintroid/src/main/java/org/catrobat/paintroid/command/serialization/CommandSerializer.kt @@ -32,8 +32,10 @@ import android.net.Uri import android.os.Build import android.os.Environment import android.provider.MediaStore +import android.util.Log import com.esotericsoftware.kryo.Kryo import com.esotericsoftware.kryo.io.Input +import com.esotericsoftware.kryo.io.KryoBufferUnderflowException import com.esotericsoftware.kryo.io.Output import org.catrobat.paintroid.colorpicker.ColorHistory import org.catrobat.paintroid.command.Command @@ -229,24 +231,26 @@ open class CommandSerializer(private val activityContext: Context, private val c fun readFromInternalMemory(stream: FileInputStream): WorkspaceReturnValue { var commandModel: CommandManagerModel? = null var colorHistory: ColorHistory? = null - - Input(stream).use { input -> - if (!input.readString().equals(MAGIC_VALUE)) { - throw NotCatrobatImageException("Magic Value doesn't exist.") - } - val imageVersion = input.readInt() - if (CURRENT_IMAGE_VERSION != imageVersion) { - setRegisterMapVersion(imageVersion) - registerClasses() - } - commandModel = kryo.readObject(input, CommandManagerModel::class.java) - if (input.available() != 0) { - colorHistory = kryo.readObject(input, ColorHistory::class.java) + try { + Input(stream).use { input -> + if (!input.readString().equals(MAGIC_VALUE)) { + throw NotCatrobatImageException("Magic Value doesn't exist.") + } + val imageVersion = input.readInt() + if (CURRENT_IMAGE_VERSION != imageVersion) { + setRegisterMapVersion(imageVersion) + registerClasses() + } + commandModel = kryo.readObject(input, CommandManagerModel::class.java) + if (input.available() != 0) { + colorHistory = kryo.readObject(input, ColorHistory::class.java) + } } + commandModel?.commands?.reverse() + } catch (e: KryoBufferUnderflowException) { + Log.e("readFromInternalMemory", "Buffer underflow: ${e.message}", e) + return WorkspaceReturnValue(null, null) } - - commandModel?.commands?.reverse() - return WorkspaceReturnValue(commandModel, colorHistory) } diff --git a/build.gradle b/build.gradle index 66a3b52d98..9a490e41ce 100644 --- a/build.gradle +++ b/build.gradle @@ -27,7 +27,7 @@ buildscript { maven { url 'https://jitpack.io' } } dependencies { - classpath 'com.android.tools.build:gradle:7.2.1' + classpath 'com.android.tools.build:gradle:7.4.2' classpath 'com.hiya:jacoco-android:0.2' classpath 'com.github.Catrobat:Gradle:1.6.2' classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:3.1.0' diff --git a/colorpicker/build.gradle b/colorpicker/build.gradle index e1f8ea1e11..d4e8827c43 100644 --- a/colorpicker/build.gradle +++ b/colorpicker/build.gradle @@ -27,8 +27,6 @@ android { minSdkVersion rootProject.ext.androidMinSdkVersion targetSdkVersion rootProject.ext.androidTargetSdkVersion testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' - versionCode rootProject.ext.androidVersionCode - versionName rootProject.ext.androidVersionName } compileOptions { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index eb250c9aae..6e32ad3dcd 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip