Prevent zip streams from getting closed
diff --git a/lottie/src/main/java/com/airbnb/lottie/LottieCompositionFactory.java b/lottie/src/main/java/com/airbnb/lottie/LottieCompositionFactory.java index 553660b..265d697 100644 --- a/lottie/src/main/java/com/airbnb/lottie/LottieCompositionFactory.java +++ b/lottie/src/main/java/com/airbnb/lottie/LottieCompositionFactory.java
@@ -230,6 +230,11 @@ */ @WorkerThread public static LottieResult<LottieComposition> fromJsonReaderSync(JsonReader reader, @Nullable String cacheKey) { + return fromJsonReaderSyncInternal(reader, cacheKey, true); + } + + private static LottieResult<LottieComposition> fromJsonReaderSyncInternal( + JsonReader reader, @Nullable String cacheKey, boolean close) { try { LottieComposition composition = LottieCompositionParser.parse(reader); LottieCompositionCache.getInstance().put(cacheKey, composition); @@ -237,7 +242,9 @@ } catch (Exception e) { return new LottieResult<>(e); } finally { - closeQuietly(reader); + if (close) { + closeQuietly(reader); + } } } @@ -274,7 +281,8 @@ if (entry.getName().contains("__MACOSX")) { inputStream.closeEntry(); } else if (entry.getName().contains(".json")) { - composition = LottieCompositionFactory.fromJsonInputStreamSync(inputStream, cacheKey, false).getValue(); + JsonReader reader = new JsonReader(new InputStreamReader(inputStream)); + composition = LottieCompositionFactory.fromJsonReaderSyncInternal(reader, null, false).getValue(); } else if (entry.getName().contains(".png")) { String[] splitName = entry.getName().split("/"); String name = splitName[splitName.length - 1];