From 55cb41f5b293c6b6eb2c7999e62f73ff4093d3ff Mon Sep 17 00:00:00 2001 From: Michael Walker Date: Mon, 26 Feb 2018 14:19:02 +0000 Subject: [PATCH 1/3] Use DeletingFileInputStream in tar method --- .../git-bridge/src/main/java/uk/ac/ic/wlgitbridge/util/Tar.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/util/Tar.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/util/Tar.java index 5a257616ab..d7a5eec505 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/util/Tar.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/util/Tar.java @@ -68,7 +68,7 @@ public class Tar { tmp.deleteOnExit(); try (FileOutputStream target = new FileOutputStream(tmp)) { tarTo(fileOrDir, target); - return new FileInputStream(tmp); + return new DeletingFileInputStream(tmp); } } From ddc524b58851ae3b79ed212408a5834f8e2e183e Mon Sep 17 00:00:00 2001 From: Michael Walker Date: Mon, 26 Feb 2018 14:47:41 +0000 Subject: [PATCH 2/3] Log an error if a DeletingFileInputStream is open at finalization --- .../util/DeletingFileInputStream.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/util/DeletingFileInputStream.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/util/DeletingFileInputStream.java index a8fbb18a49..5ba4832979 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/util/DeletingFileInputStream.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/util/DeletingFileInputStream.java @@ -38,4 +38,23 @@ public class DeletingFileInputStream extends FileInputStream { } } } + + /** + * We shouldn't rely on this for correctness! + */ + @Override + protected void finalize() throws IOException { + try { + super.finalize(); + } finally { + if(file != null) { + Log.warn("File open at finalization time: {}", file.getCanonicalPath()); + try { + close(); + } catch (IOException e) { + Log.error("Failed to delete file", e); + } + } + } + } } From 513e83fa00142da3e5308938a7e0758c998ca0c1 Mon Sep 17 00:00:00 2001 From: Michael Walker Date: Mon, 26 Feb 2018 16:30:08 +0000 Subject: [PATCH 3/3] Clean up temporary file if tarTo raises an exception --- .../src/main/java/uk/ac/ic/wlgitbridge/util/Tar.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/util/Tar.java b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/util/Tar.java index d7a5eec505..d64d03e50a 100644 --- a/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/util/Tar.java +++ b/services/git-bridge/src/main/java/uk/ac/ic/wlgitbridge/util/Tar.java @@ -42,6 +42,9 @@ public class Tar { /* Closes target */ try (OutputStream bzip2 = new BZip2CompressorOutputStream(target)) { tarTo(fileOrDir, bzip2); + } catch (IOException e) { + tmp.delete(); + throw e; } if (sizePtr != null) { sizePtr[0] = tmp.length(); @@ -69,6 +72,9 @@ public class Tar { try (FileOutputStream target = new FileOutputStream(tmp)) { tarTo(fileOrDir, target); return new DeletingFileInputStream(tmp); + } catch (IOException e) { + tmp.delete(); + throw e; } }