From 1b8fdbe69f687c5b47bba2731777f8d58e4f44ee Mon Sep 17 00:00:00 2001 From: cfig Date: Tue, 24 Aug 2021 14:46:45 +0800 Subject: [PATCH] refine lzma ramdisk type check We meet this OOM after PR 66: https://github.com/cfig/Android_boot_image_editor/pull/66 Need to harden ZipHelper by catching OOM error when trying lzma. --- helper/src/main/kotlin/cfig/helper/ZipHelper.kt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/helper/src/main/kotlin/cfig/helper/ZipHelper.kt b/helper/src/main/kotlin/cfig/helper/ZipHelper.kt index 0085c46..ba136bc 100644 --- a/helper/src/main/kotlin/cfig/helper/ZipHelper.kt +++ b/helper/src/main/kotlin/cfig/helper/ZipHelper.kt @@ -213,6 +213,14 @@ class ZipHelper { this.closeArchiveEntry() } + /* + LZMACompressorInputStream() may raise OOM sometimes, like this: + Caused by: java.lang.OutOfMemoryError: Java heap space + at org.tukaani.xz.ArrayCache.getByteArray(Unknown Source) + at org.tukaani.xz.lz.LZDecoder.(Unknown Source) + at org.tukaani.xz.LZMAInputStream.initialize(Unknown Source) + So we catch it explicitly. + */ fun isLzma(compressedFile: String): Boolean { return try { FileInputStream(compressedFile).use { fis -> @@ -222,6 +230,8 @@ class ZipHelper { true } catch (e: IOException) { false + } catch (e: OutOfMemoryError) { + false } }