From d9801662dd6c3277baeca54641207efbda6deb29 Mon Sep 17 00:00:00 2001 From: Julian Raufelder Date: Fri, 11 Feb 2022 12:11:21 +0100 Subject: [PATCH] Close buffer and null-check response body --- .../repository/UpdateCheckRepositoryImpl.java | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/data/src/main/java/org/cryptomator/data/repository/UpdateCheckRepositoryImpl.java b/data/src/main/java/org/cryptomator/data/repository/UpdateCheckRepositoryImpl.java index 048a18ff..b768ad66 100644 --- a/data/src/main/java/org/cryptomator/data/repository/UpdateCheckRepositoryImpl.java +++ b/data/src/main/java/org/cryptomator/data/repository/UpdateCheckRepositoryImpl.java @@ -38,6 +38,7 @@ import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import okio.BufferedSink; +import okio.BufferedSource; import okio.Okio; @Singleton @@ -112,20 +113,20 @@ public class UpdateCheckRepositoryImpl implements UpdateCheckRepository { final Response response = httpClient.newCall(request).execute(); - if (response.isSuccessful()) { - final BufferedSink sink = Okio.buffer(Okio.sink(file)); - sink.writeAll(response.body().source()); - sink.flush(); - sink.close(); + if (response.isSuccessful() && response.body() != null) { + try (BufferedSource source = response.body().source(); BufferedSink sink = Okio.buffer(Okio.sink(file))) { + sink.writeAll(source); + sink.flush(); - String apkSha256 = calculateSha256(file); + String apkSha256 = calculateSha256(file); - if (!apkSha256.equals(entity.getApkSha256())) { - file.delete(); - throw new HashMismatchUpdateCheckException(String.format( // - "Sha of calculated hash (%s) doesn't match the specified one (%s)", // - apkSha256, // - entity.getApkSha256())); + if (!apkSha256.equals(entity.getApkSha256())) { + file.delete(); + throw new HashMismatchUpdateCheckException(String.format( // + "Sha of calculated hash (%s) doesn't match the specified one (%s)", // + apkSha256, // + entity.getApkSha256())); + } } } else { throw new GeneralUpdateErrorException("Failed to load update file, status code is not correct: " + response.code()); @@ -174,7 +175,7 @@ public class UpdateCheckRepositoryImpl implements UpdateCheckRepository { } private LatestVersion toLatestVersion(Response response) throws IOException, GeneralUpdateErrorException { - if (response.isSuccessful()) { + if (response.isSuccessful() && response.body() != null) { return new LatestVersion(response.body().string()); } else { throw new GeneralUpdateErrorException("Failed to update. Wrong status code in response from server: " + response.code()); @@ -182,7 +183,7 @@ public class UpdateCheckRepositoryImpl implements UpdateCheckRepository { } private UpdateCheck toUpdateCheck(Response response, LatestVersion latestVersion) throws IOException, GeneralUpdateErrorException { - if (response.isSuccessful()) { + if (response.isSuccessful() && response.body() != null) { final String releaseNote = response.body().string(); return new UpdateCheckImpl(releaseNote, latestVersion); } else {