From f2473cc12ec657ade9afa177d4648ae46ff961fa Mon Sep 17 00:00:00 2001 From: Tom Cherry Date: Wed, 4 Aug 2021 11:20:49 -0700 Subject: [PATCH] DropBoxManager: use BufferedInputStream when using GZIPInputStream GZIPInputStream has a bug (b/195554062) where it uses unbuffered IO when reading the gzip header. This triggers the UnbufferedIoViolation strict mode violation for apps that target API level 28+. Independently of fixing GZIPInputStream, DropBoxManager can use BufferedInputStream to take a proactive step against this and future bugs. Bug: 195554712 Test: Successfully read gzip dropbox entries from API level 28+ app. Change-Id: Id539efcb366b3e3d53513a098975b25866ed16ff --- core/java/android/os/DropBoxManager.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/java/android/os/DropBoxManager.java b/core/java/android/os/DropBoxManager.java index fd576c94b1942..d70167677ee78 100644 --- a/core/java/android/os/DropBoxManager.java +++ b/core/java/android/os/DropBoxManager.java @@ -30,6 +30,7 @@ import android.util.Log; import com.android.internal.os.IDropBoxManagerService; +import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.Closeable; import java.io.File; @@ -234,7 +235,8 @@ public class DropBoxManager { } else { return null; } - return (mFlags & IS_GZIPPED) != 0 ? new GZIPInputStream(is) : is; + return (mFlags & IS_GZIPPED) != 0 + ? new GZIPInputStream(new BufferedInputStream(is)) : is; } public static final @android.annotation.NonNull Parcelable.Creator CREATOR = new Parcelable.Creator() {