From ddf5cd73c9f609b1fc5da325e186b68e6093e717 Mon Sep 17 00:00:00 2001 From: Stefan Bodewig Date: Mon, 13 Jul 2009 10:08:35 +0000 Subject: [PATCH] check error on remaining PrintWriter instances git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@793528 13f79535-47bb-0310-9956-ffa450edef68 --- WHATSNEW | 5 +++++ .../org/apache/tools/ant/taskdefs/AntStructure.java | 4 ++++ src/main/org/apache/tools/ant/taskdefs/Exec.java | 2 +- src/main/org/apache/tools/ant/taskdefs/Jar.java | 6 ++++++ .../org/apache/tools/ant/taskdefs/ManifestTask.java | 3 +++ .../tools/ant/taskdefs/cvslib/ChangeLogTask.java | 4 ++++ .../apache/tools/ant/taskdefs/cvslib/CvsTagDiff.java | 3 +++ .../apache/tools/ant/taskdefs/optional/NetRexxC.java | 7 ++++++- .../ant/taskdefs/optional/jdepend/JDependTask.java | 11 ++++++++++- 9 files changed, 42 insertions(+), 3 deletions(-) diff --git a/WHATSNEW b/WHATSNEW index 7e87a3c4b..ce93e0d4c 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -392,6 +392,11 @@ Fixed bugs: which confused some untar implementations. Bugzilla Report 47421. + * various places where unchecked PrintWriters could hide exceptions + have been revisited to now check the error status or not use a + PrintWriter at all. + Bugzilla Report 43537. + Other changes: -------------- * The get task now also follows redirects from http to https diff --git a/src/main/org/apache/tools/ant/taskdefs/AntStructure.java b/src/main/org/apache/tools/ant/taskdefs/AntStructure.java index 6fbd49ce4..5fa927644 100644 --- a/src/main/org/apache/tools/ant/taskdefs/AntStructure.java +++ b/src/main/org/apache/tools/ant/taskdefs/AntStructure.java @@ -117,6 +117,10 @@ public class AntStructure extends Task { printer.printTail(out); + if (out.checkError()) { + throw new IOException("Encountered an error writing Ant" + + " structure"); + } } catch (IOException ioe) { throw new BuildException("Error writing " + output.getAbsolutePath(), ioe, getLocation()); diff --git a/src/main/org/apache/tools/ant/taskdefs/Exec.java b/src/main/org/apache/tools/ant/taskdefs/Exec.java index c1d354b89..a92633616 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Exec.java +++ b/src/main/org/apache/tools/ant/taskdefs/Exec.java @@ -232,7 +232,7 @@ public class Exec extends Task { */ protected void logFlush() { if (fos != null) { - fos.close(); + fos.close(); } } diff --git a/src/main/org/apache/tools/ant/taskdefs/Jar.java b/src/main/org/apache/tools/ant/taskdefs/Jar.java index 71c6ec364..20811f454 100644 --- a/src/main/org/apache/tools/ant/taskdefs/Jar.java +++ b/src/main/org/apache/tools/ant/taskdefs/Jar.java @@ -539,6 +539,9 @@ public class Jar extends Zip { OutputStreamWriter osw = new OutputStreamWriter(baos, Manifest.JAR_ENCODING); PrintWriter writer = new PrintWriter(osw); manifest.write(writer); + if (writer.checkError()) { + throw new IOException("Encountered an error writing the manifest"); + } writer.close(); ByteArrayInputStream bais = @@ -626,6 +629,9 @@ public class Jar extends Zip { } } + if (writer.checkError()) { + throw new IOException("Encountered an error writing jar index"); + } writer.close(); ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); diff --git a/src/main/org/apache/tools/ant/taskdefs/ManifestTask.java b/src/main/org/apache/tools/ant/taskdefs/ManifestTask.java index 1247eccdb..10bde8b6e 100644 --- a/src/main/org/apache/tools/ant/taskdefs/ManifestTask.java +++ b/src/main/org/apache/tools/ant/taskdefs/ManifestTask.java @@ -251,6 +251,9 @@ public class ManifestTask extends Task { OutputStreamWriter osw = new OutputStreamWriter(fos, Manifest.JAR_ENCODING); w = new PrintWriter(osw); toWrite.write(w); + if (w.checkError()) { + throw new IOException("Encountered an error writing manifest"); + } } catch (IOException e) { throw new BuildException("Failed to write " + manifestFile, e, getLocation()); diff --git a/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogTask.java b/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogTask.java index 953a1e01e..83cd03081 100644 --- a/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogTask.java +++ b/src/main/org/apache/tools/ant/taskdefs/cvslib/ChangeLogTask.java @@ -471,6 +471,10 @@ public class ChangeLogTask extends AbstractCvsTask { final ChangeLogWriter serializer = new ChangeLogWriter(); serializer.printChangeLog(writer, entrySet); + + if (writer.checkError()) { + throw new IOException("Encountered an error writing changelog"); + } } catch (final UnsupportedEncodingException uee) { getProject().log(uee.toString(), Project.MSG_ERR); } catch (final IOException ioe) { diff --git a/src/main/org/apache/tools/ant/taskdefs/cvslib/CvsTagDiff.java b/src/main/org/apache/tools/ant/taskdefs/cvslib/CvsTagDiff.java index dded52cc4..cbde78380 100644 --- a/src/main/org/apache/tools/ant/taskdefs/cvslib/CvsTagDiff.java +++ b/src/main/org/apache/tools/ant/taskdefs/cvslib/CvsTagDiff.java @@ -445,6 +445,9 @@ public class CvsTagDiff extends AbstractCvsTask { } DOM_WRITER.closeElement(root, writer, 0, "\t", true); writer.flush(); + if (writer.checkError()) { + throw new IOException("Encountered an error writing tagdiff"); + } writer.close(); } catch (UnsupportedEncodingException uee) { log(uee.toString(), Project.MSG_ERR); diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/NetRexxC.java b/src/main/org/apache/tools/ant/taskdefs/optional/NetRexxC.java index 9f798ea47..9399f9bff 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/NetRexxC.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/NetRexxC.java @@ -791,8 +791,10 @@ public class NetRexxC extends MatchingTask { try { StringWriter out = new StringWriter(); + PrintWriter w = null; int rc = - COM.ibm.netrexx.process.NetRexxC.main(new Rexx(compileArgs), new PrintWriter(out)); + COM.ibm.netrexx.process.NetRexxC.main(new Rexx(compileArgs), + w = new PrintWriter(out)); String sdir = srcDir.getAbsolutePath(); String ddir = destDir.getAbsolutePath(); boolean doReplace = !(sdir.equals(ddir)); @@ -839,6 +841,9 @@ public class NetRexxC extends MatchingTask { throw new BuildException("Compile failed, messages should " + "have been provided."); } + if (w.checkError()) { + throw new IOException("Encountered an error"); + } } catch (IOException ioe) { throw new BuildException("Unexpected IOException while " + "playing with Strings", ioe); diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/jdepend/JDependTask.java b/src/main/org/apache/tools/ant/taskdefs/optional/jdepend/JDependTask.java index 8d654707e..a5c3b27ef 100644 --- a/src/main/org/apache/tools/ant/taskdefs/optional/jdepend/JDependTask.java +++ b/src/main/org/apache/tools/ant/taskdefs/optional/jdepend/JDependTask.java @@ -455,6 +455,7 @@ public class JDependTask extends Task { } FileWriter fw = null; + PrintWriter pw = null; if (getOutputFile() != null) { try { fw = new FileWriter(getOutputFile().getPath()); @@ -464,7 +465,8 @@ public class JDependTask extends Task { log(msg); throw new BuildException(msg); } - jdepend.setWriter(new PrintWriter(fw)); + pw = new PrintWriter(fw); + jdepend.setWriter(pw); log("Output to be stored in " + getOutputFile().getPath()); } @@ -550,7 +552,14 @@ public class JDependTask extends Task { } jdepend.analyze(); + if (pw.checkError()) { + throw new IOException("Encountered an error writing JDepend" + + " output"); + } + } catch (IOException ex) { + throw new BuildException(ex); } finally { + FileUtils.close(pw); FileUtils.close(fw); } return SUCCESS;