Skip to content

Commit 31cfe07

Browse files
PAINTROID-760 Crash: Buffer underflow
1 parent 6b433fd commit 31cfe07

File tree

5 files changed

+23
-23
lines changed

5 files changed

+23
-23
lines changed

Paintroid/build.gradle

+1-3
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,6 @@ android {
6868
minSdkVersion rootProject.ext.androidMinSdkVersion
6969
targetSdkVersion rootProject.ext.androidTargetSdkVersion
7070
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
71-
versionCode rootProject.ext.androidVersionCode
72-
versionName rootProject.ext.androidVersionName
7371
}
7472

7573
compileOptions {
@@ -125,7 +123,7 @@ dependencies {
125123
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.8'
126124
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.8'
127125
implementation 'androidx.exifinterface:exifinterface:1.3.2'
128-
implementation 'com.esotericsoftware:kryo:5.5.0'
126+
implementation 'com.esotericsoftware:kryo:5.6.2'
129127
implementation 'id.zelory:compressor:2.1.1'
130128
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
131129

Paintroid/src/main/java/org/catrobat/paintroid/command/serialization/CommandSerializer.kt

+20-16
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,10 @@ import android.net.Uri
3232
import android.os.Build
3333
import android.os.Environment
3434
import android.provider.MediaStore
35+
import android.util.Log
3536
import com.esotericsoftware.kryo.Kryo
3637
import com.esotericsoftware.kryo.io.Input
38+
import com.esotericsoftware.kryo.io.KryoBufferUnderflowException
3739
import com.esotericsoftware.kryo.io.Output
3840
import org.catrobat.paintroid.colorpicker.ColorHistory
3941
import org.catrobat.paintroid.command.Command
@@ -229,24 +231,26 @@ open class CommandSerializer(private val activityContext: Context, private val c
229231
fun readFromInternalMemory(stream: FileInputStream): WorkspaceReturnValue {
230232
var commandModel: CommandManagerModel? = null
231233
var colorHistory: ColorHistory? = null
232-
233-
Input(stream).use { input ->
234-
if (!input.readString().equals(MAGIC_VALUE)) {
235-
throw NotCatrobatImageException("Magic Value doesn't exist.")
236-
}
237-
val imageVersion = input.readInt()
238-
if (CURRENT_IMAGE_VERSION != imageVersion) {
239-
setRegisterMapVersion(imageVersion)
240-
registerClasses()
241-
}
242-
commandModel = kryo.readObject(input, CommandManagerModel::class.java)
243-
if (input.available() != 0) {
244-
colorHistory = kryo.readObject(input, ColorHistory::class.java)
234+
try {
235+
Input(stream).use { input ->
236+
if (!input.readString().equals(MAGIC_VALUE)) {
237+
throw NotCatrobatImageException("Magic Value doesn't exist.")
238+
}
239+
val imageVersion = input.readInt()
240+
if (CURRENT_IMAGE_VERSION != imageVersion) {
241+
setRegisterMapVersion(imageVersion)
242+
registerClasses()
243+
}
244+
commandModel = kryo.readObject(input, CommandManagerModel::class.java)
245+
if (input.available() != 0) {
246+
colorHistory = kryo.readObject(input, ColorHistory::class.java)
247+
}
245248
}
249+
commandModel?.commands?.reverse()
250+
} catch (e: KryoBufferUnderflowException) {
251+
Log.e("readFromInternalMemory", "Buffer underflow: ${e.message}", e)
252+
return WorkspaceReturnValue(null, null)
246253
}
247-
248-
commandModel?.commands?.reverse()
249-
250254
return WorkspaceReturnValue(commandModel, colorHistory)
251255
}
252256

build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ buildscript {
2727
maven { url 'https://jitpack.io' }
2828
}
2929
dependencies {
30-
classpath 'com.android.tools.build:gradle:7.2.1'
30+
classpath 'com.android.tools.build:gradle:7.4.2'
3131
classpath 'com.hiya:jacoco-android:0.2'
3232
classpath 'com.github.Catrobat:Gradle:1.6.2'
3333
classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:3.1.0'

colorpicker/build.gradle

-2
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,6 @@ android {
2727
minSdkVersion rootProject.ext.androidMinSdkVersion
2828
targetSdkVersion rootProject.ext.androidTargetSdkVersion
2929
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
30-
versionCode rootProject.ext.androidVersionCode
31-
versionName rootProject.ext.androidVersionName
3230
}
3331

3432
compileOptions {

gradle/wrapper/gradle-wrapper.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
33
distributionPath=wrapper/dists
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists
6-
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-all.zip
6+
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip

0 commit comments

Comments
 (0)