From 48c16592111737b48c6b90e2de0337077c85ef37 Mon Sep 17 00:00:00 2001 From: Andrew Gaul Date: Sat, 19 Aug 2017 00:21:00 -0700 Subject: [PATCH] Ensure that HTTP InputStream are closed --- .../com/totsp/crossword/HttpDownloadActivity.java | 8 +++++++- .../totsp/crossword/net/AbstractJPZDownloader.java | 1 + .../java/com/totsp/crossword/net/NYTDownloader.java | 9 +++++++-- .../com/totsp/crossword/versions/DefaultUtil.java | 13 +++++++------ puzlib/src/main/java/com/totsp/crossword/io/IO.java | 10 ++++++++++ .../web/server/net/AbstractDownloader.java | 2 ++ 6 files changed, 34 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/totsp/crossword/HttpDownloadActivity.java b/app/src/main/java/com/totsp/crossword/HttpDownloadActivity.java index f4442d8c..905bbcc2 100755 --- a/app/src/main/java/com/totsp/crossword/HttpDownloadActivity.java +++ b/app/src/main/java/com/totsp/crossword/HttpDownloadActivity.java @@ -1,5 +1,7 @@ package com.totsp.crossword; +import com.totsp.crossword.io.IO; + import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -134,7 +136,11 @@ private void initializeDownload() { InputStream is = response.body().byteStream(); File puzFile = new File(crosswordsFolder, filename); FileOutputStream fos = new FileOutputStream(puzFile); - copyStream(is, fos); + try { + copyStream(is, fos); + } finally { + IO.closeQuietly(is); + } fos.close(); Intent i = new Intent(Intent.ACTION_EDIT, Uri.fromFile(puzFile), this, PlayActivity.class); diff --git a/app/src/main/java/com/totsp/crossword/net/AbstractJPZDownloader.java b/app/src/main/java/com/totsp/crossword/net/AbstractJPZDownloader.java index 2bbf7431..54eb59cb 100755 --- a/app/src/main/java/com/totsp/crossword/net/AbstractJPZDownloader.java +++ b/app/src/main/java/com/totsp/crossword/net/AbstractJPZDownloader.java @@ -12,6 +12,7 @@ import android.net.Uri; +import com.totsp.crossword.io.IO; import com.totsp.crossword.io.JPZIO; import com.totsp.crossword.puz.PuzzleMeta; import com.totsp.crossword.versions.AndroidVersionUtils; diff --git a/app/src/main/java/com/totsp/crossword/net/NYTDownloader.java b/app/src/main/java/com/totsp/crossword/net/NYTDownloader.java index b954f722..c4a69eee 100755 --- a/app/src/main/java/com/totsp/crossword/net/NYTDownloader.java +++ b/app/src/main/java/com/totsp/crossword/net/NYTDownloader.java @@ -15,6 +15,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; +import java.io.InputStream; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; @@ -133,8 +134,12 @@ protected File download(Date date, String urlSuffix) { .apply(); File f = new File(downloadDirectory, this.createFileName(date)); FileOutputStream fos = new FileOutputStream(f); - IO.copyStream( - response.body().byteStream(), fos); + InputStream is = response.body().byteStream(); + try { + IO.copyStream(is, fos); + } finally { + IO.closeQuietly(is); + } fos.close(); IO.copyStream( diff --git a/app/src/main/java/com/totsp/crossword/versions/DefaultUtil.java b/app/src/main/java/com/totsp/crossword/versions/DefaultUtil.java index 921d2453..897f181f 100755 --- a/app/src/main/java/com/totsp/crossword/versions/DefaultUtil.java +++ b/app/src/main/java/com/totsp/crossword/versions/DefaultUtil.java @@ -13,10 +13,9 @@ import com.totsp.crossword.io.IO; import com.totsp.crossword.puz.PuzzleMeta; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; +import java.io.InputStream; import java.net.URL; import java.util.Map; import java.util.Map.Entry; @@ -44,10 +43,12 @@ public boolean downloadFile(URL url, File destination, Response response = httpclient.newCall(requestBuilder.build()).execute(); FileOutputStream fos = new FileOutputStream(destination); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - - IO.copyStream(response.body().byteStream(), baos); - IO.copyStream(new ByteArrayInputStream(baos.toByteArray()), fos); + InputStream is = response.body().byteStream(); + try { + IO.copyStream(is, fos); + } finally { + IO.closeQuietly(is); + } fos.close(); return true; diff --git a/puzlib/src/main/java/com/totsp/crossword/io/IO.java b/puzlib/src/main/java/com/totsp/crossword/io/IO.java index 3a59aaf3..6b32a4e8 100755 --- a/puzlib/src/main/java/com/totsp/crossword/io/IO.java +++ b/puzlib/src/main/java/com/totsp/crossword/io/IO.java @@ -673,4 +673,14 @@ public static int copyStream(InputStream sourceStream, OutputStream destinationS return totalBytes; } + public static void closeQuietly(InputStream is) { + if (is == null) { + return; + } + try { + is.close(); + } catch (IOException ioe) { + ioe.printStackTrace(); + } + } } diff --git a/web/src/main/java/com/totsp/crossword/web/server/net/AbstractDownloader.java b/web/src/main/java/com/totsp/crossword/web/server/net/AbstractDownloader.java index 8b499f6a..575ef01f 100755 --- a/web/src/main/java/com/totsp/crossword/web/server/net/AbstractDownloader.java +++ b/web/src/main/java/com/totsp/crossword/web/server/net/AbstractDownloader.java @@ -42,6 +42,8 @@ public Puzzle download(Date d){ } catch (IOException ex) { Logger.getLogger(AbstractDownloader.class.getName()).log(Level.SEVERE, null, ex); return null; + } finally { + IO.closeQuietly(is); } } }