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];