This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-net.git
commit e2715a012ab91a844d28b0963e2f8b322c225ab9 Author: Gary Gregory <[email protected]> AuthorDate: Sun Sep 20 18:47:12 2020 -0400 Fix potential resource leaks with try-with-resource blocks. --- .../net/examples/cidr/SubnetUtilsExample.java | 17 +++--- .../commons/net/examples/ftp/FTPClientExample.java | 20 ++----- .../commons/net/examples/mail/POP3ExportMbox.java | 59 ++++++++++---------- .../apache/commons/net/examples/unix/chargen.java | 24 ++++---- .../apache/commons/net/finger/FingerClient.java | 13 +---- .../java/org/apache/commons/net/ftp/FTPClient.java | 36 +++++------- .../java/org/apache/commons/net/ftp/FTPFile.java | 64 +++++++++++----------- .../apache/commons/net/ftp/FTPListParseEngine.java | 15 +++-- .../org/apache/commons/net/nntp/NNTPClient.java | 44 ++++++--------- .../org/apache/commons/net/smtp/SMTPClient.java | 12 ++-- 10 files changed, 133 insertions(+), 171 deletions(-) diff --git a/src/main/java/org/apache/commons/net/examples/cidr/SubnetUtilsExample.java b/src/main/java/org/apache/commons/net/examples/cidr/SubnetUtilsExample.java index 57cb1b8..6786993 100644 --- a/src/main/java/org/apache/commons/net/examples/cidr/SubnetUtilsExample.java +++ b/src/main/java/org/apache/commons/net/examples/cidr/SubnetUtilsExample.java @@ -55,17 +55,16 @@ public class SubnetUtilsExample { System.out.printf("Total usable addresses: \t%d%n", Long.valueOf(info.getAddressCountLong())); System.out.printf("Address List: %s%n%n", Arrays.toString(info.getAllAddresses())); - final String prompt ="Enter an IP address (e.g. 192.168.0.10):"; + final String prompt = "Enter an IP address (e.g. 192.168.0.10):"; System.out.println(prompt); - final Scanner scanner = new Scanner(System.in); - while (scanner.hasNextLine()) { - final String address = scanner.nextLine(); - System.out.println("The IP address [" + address + "] is " - + (info.isInRange(address) ? "" : "not ") - + "within the subnet [" + subnet + "]"); - System.out.println(prompt); + try (final Scanner scanner = new Scanner(System.in)) { + while (scanner.hasNextLine()) { + final String address = scanner.nextLine(); + System.out.println("The IP address [" + address + "] is " + (info.isInRange(address) ? "" : "not ") + + "within the subnet [" + subnet + "]"); + System.out.println(prompt); + } } - scanner.close(); } } diff --git a/src/main/java/org/apache/commons/net/examples/ftp/FTPClientExample.java b/src/main/java/org/apache/commons/net/examples/ftp/FTPClientExample.java index 9691ad9..887037d 100644 --- a/src/main/java/org/apache/commons/net/examples/ftp/FTPClientExample.java +++ b/src/main/java/org/apache/commons/net/examples/ftp/FTPClientExample.java @@ -397,13 +397,9 @@ __main: if (storeFile) { - InputStream input; - - input = new FileInputStream(local); - - ftp.storeFile(remote, input); - - input.close(); + try (InputStream input = new FileInputStream(local)) { + ftp.storeFile(remote, input); + } if (keepAliveTimeout > 0) { showCslStats(ftp); @@ -505,13 +501,9 @@ __main: } else { - OutputStream output; - - output = new FileOutputStream(local); - - ftp.retrieveFile(remote, output); - - output.close(); + try (OutputStream output = new FileOutputStream(local)) { + ftp.retrieveFile(remote, output); + } if (keepAliveTimeout > 0) { showCslStats(ftp); diff --git a/src/main/java/org/apache/commons/net/examples/mail/POP3ExportMbox.java b/src/main/java/org/apache/commons/net/examples/mail/POP3ExportMbox.java index cb28027..2f1410b 100644 --- a/src/main/java/org/apache/commons/net/examples/mail/POP3ExportMbox.java +++ b/src/main/java/org/apache/commons/net/examples/mail/POP3ExportMbox.java @@ -141,19 +141,20 @@ public final class POP3ExportMbox System.out.println("Writing dir: " + mbox); // Currently POP3Client uses iso-8859-1 for (int i = 1; i <= count; i++) { - final OutputStreamWriter fw = new OutputStreamWriter( - new FileOutputStream(new File(mbox,i+".eml")),StandardCharsets.ISO_8859_1); - writeFile(pop3, fw, i); - fw.close(); + try (final OutputStreamWriter fw = new OutputStreamWriter( + new FileOutputStream(new File(mbox, i + ".eml")), StandardCharsets.ISO_8859_1)) { + writeFile(pop3, fw, i); + } } } else { System.out.println("Writing file: " + mbox); // Currently POP3Client uses iso-8859-1 - final OutputStreamWriter fw = new OutputStreamWriter(new FileOutputStream(mbox),StandardCharsets.ISO_8859_1); - for (int i = 1; i <= count; i++) { - writeMbox(pop3, fw, i); + try (final OutputStreamWriter fw = new OutputStreamWriter(new FileOutputStream(mbox), + StandardCharsets.ISO_8859_1)) { + for (int i = 1; i <= count; i++) { + writeMbox(pop3, fw, i); + } } - fw.close(); } } @@ -168,38 +169,36 @@ public final class POP3ExportMbox } private static void writeFile(final POP3Client pop3, final OutputStreamWriter fw, final int i) throws IOException { - final BufferedReader r = (BufferedReader) pop3.retrieveMessage(i); - String line; - while ((line = r.readLine()) != null) - { - fw.write(line); - fw.write("\n"); + try (final BufferedReader r = (BufferedReader) pop3.retrieveMessage(i)) { + String line; + while ((line = r.readLine()) != null) { + fw.write(line); + fw.write("\n"); + } } - r.close(); } private static void writeMbox(final POP3Client pop3, final OutputStreamWriter fw, final int i) throws IOException { final SimpleDateFormat DATE_FORMAT // for mbox From_ lines - = new SimpleDateFormat("EEE MMM dd HH:mm:ss YYYY"); + = new SimpleDateFormat("EEE MMM dd HH:mm:ss YYYY"); final String replyTo = "MAILER-DAEMON"; // default final Date received = new Date(); - final BufferedReader r = (BufferedReader) pop3.retrieveMessage(i); - fw.append("From "); - fw.append(replyTo); - fw.append(' '); - fw.append(DATE_FORMAT.format(received)); - fw.append("\n"); - String line; - while ((line = r.readLine()) != null) - { - if (startsWith(line, PATFROM)) { - fw.write(">"); + try (final BufferedReader r = (BufferedReader) pop3.retrieveMessage(i)) { + fw.append("From "); + fw.append(replyTo); + fw.append(' '); + fw.append(DATE_FORMAT.format(received)); + fw.append("\n"); + String line; + while ((line = r.readLine()) != null) { + if (startsWith(line, PATFROM)) { + fw.write(">"); + } + fw.write(line); + fw.write("\n"); } - fw.write(line); fw.write("\n"); } - fw.write("\n"); - r.close(); } private static boolean startsWith(final String input, final Pattern pat) { diff --git a/src/main/java/org/apache/commons/net/examples/unix/chargen.java b/src/main/java/org/apache/commons/net/examples/unix/chargen.java index 426ac99..781b7fc 100644 --- a/src/main/java/org/apache/commons/net/examples/unix/chargen.java +++ b/src/main/java/org/apache/commons/net/examples/unix/chargen.java @@ -47,26 +47,22 @@ public final class chargen int lines = 100; String line; final CharGenTCPClient client = new CharGenTCPClient(); - BufferedReader chargenInput; // We want to timeout if a response takes longer than 60 seconds client.setDefaultTimeout(60000); client.connect(host); - chargenInput = - new BufferedReader(new InputStreamReader(client.getInputStream())); - - // We assume the chargen service outputs lines, but it really doesn't - // have to, so this code might actually not work if no newlines are - // present. - while (lines-- > 0) - { - if ((line = chargenInput.readLine()) == null) { - break; + try (BufferedReader chargenInput = new BufferedReader(new InputStreamReader(client.getInputStream()))) { + + // We assume the chargen service outputs lines, but it really doesn't + // have to, so this code might actually not work if no newlines are + // present. + while (lines-- > 0) { + if ((line = chargenInput.readLine()) == null) { + break; + } + System.out.println(line); } - System.out.println(line); } - - chargenInput.close(); client.disconnect(); } diff --git a/src/main/java/org/apache/commons/net/finger/FingerClient.java b/src/main/java/org/apache/commons/net/finger/FingerClient.java index 11c7654..4993d86 100644 --- a/src/main/java/org/apache/commons/net/finger/FingerClient.java +++ b/src/main/java/org/apache/commons/net/finger/FingerClient.java @@ -85,23 +85,16 @@ public class FingerClient extends SocketClient { int read; final StringBuilder result = new StringBuilder(__buffer.length); - BufferedReader input; - input = - new BufferedReader(new InputStreamReader(getInputStream(longOutput, - username), getCharset())); - - try { - while (true) - { + try (BufferedReader input = new BufferedReader( + new InputStreamReader(getInputStream(longOutput, username), getCharset()));) { + while (true) { read = input.read(__buffer, 0, __buffer.length); if (read <= 0) { break; } result.append(__buffer, 0, read); } - } finally { - input.close(); } return result.toString(); diff --git a/src/main/java/org/apache/commons/net/ftp/FTPClient.java b/src/main/java/org/apache/commons/net/ftp/FTPClient.java index c0ab811..56e0447 100644 --- a/src/main/java/org/apache/commons/net/ftp/FTPClient.java +++ b/src/main/java/org/apache/commons/net/ftp/FTPClient.java @@ -825,9 +825,7 @@ implements Configurable { // if no activePortRange was set (correctly) -> getActivePort() = 0 // -> new ServerSocket(0) -> bind to any free local port - final ServerSocket server = _serverSocketFactory_.createServerSocket(getActivePort(), 1, getHostAddress()); - - try { + try (final ServerSocket server = _serverSocketFactory_.createServerSocket(getActivePort(), 1, getHostAddress())) { // Try EPRT only if remote server is over IPv6, if not use PORT, // because EPRT has no advantage over PORT on IPv4. // It could even have the disadvantage, @@ -872,8 +870,6 @@ implements Configurable if (__sendDataSocketBufferSize > 0) { socket.setSendBufferSize(__sendDataSocketBufferSize); } - } finally { - server.close(); } } else @@ -2940,27 +2936,25 @@ implements Configurable */ public String[] listNames(final String pathname) throws IOException { - final Socket socket = _openDataConnection_(FTPCmd.NLST, getListArguments(pathname)); + final ArrayList<String> results = new ArrayList<>(); + try (final Socket socket = _openDataConnection_(FTPCmd.NLST, getListArguments(pathname))) { - if (socket == null) { - return null; - } + if (socket == null) { + return null; + } - final BufferedReader reader = - new BufferedReader(new InputStreamReader(socket.getInputStream(), getControlEncoding())); + try (final BufferedReader reader = new BufferedReader( + new InputStreamReader(socket.getInputStream(), getControlEncoding()))) { - final ArrayList<String> results = new ArrayList<>(); - String line; - while ((line = reader.readLine()) != null) { - results.add(line); + String line; + while ((line = reader.readLine()) != null) { + results.add(line); + } + } } - reader.close(); - socket.close(); - - if (completePendingCommand()) - { - final String[] names = new String[ results.size() ]; + if (completePendingCommand()) { + final String[] names = new String[results.size()]; return results.toArray(names); } diff --git a/src/main/java/org/apache/commons/net/ftp/FTPFile.java b/src/main/java/org/apache/commons/net/ftp/FTPFile.java index 7b3e02d..90b8f2f 100644 --- a/src/main/java/org/apache/commons/net/ftp/FTPFile.java +++ b/src/main/java/org/apache/commons/net/ftp/FTPFile.java @@ -460,44 +460,44 @@ public class FTPFile implements Serializable return "[Invalid: could not parse file entry]"; } final StringBuilder sb = new StringBuilder(); - final Formatter fmt = new Formatter(sb); - sb.append(formatType()); - sb.append(permissionToString(USER_ACCESS)); - sb.append(permissionToString(GROUP_ACCESS)); - sb.append(permissionToString(WORLD_ACCESS)); - fmt.format(" %4d", Integer.valueOf(getHardLinkCount())); - fmt.format(" %-8s %-8s", getUser(), getGroup()); - fmt.format(" %8d", Long.valueOf(getSize())); - Calendar timestamp = getTimestamp(); - if (timestamp != null) { - if (timezone != null) { - final TimeZone newZone = TimeZone.getTimeZone(timezone); - if (!newZone.equals(timestamp.getTimeZone())){ - final Date original = timestamp.getTime(); - final Calendar newStamp = Calendar.getInstance(newZone); - newStamp.setTime(original); - timestamp = newStamp; + try (final Formatter fmt = new Formatter(sb)) { + sb.append(formatType()); + sb.append(permissionToString(USER_ACCESS)); + sb.append(permissionToString(GROUP_ACCESS)); + sb.append(permissionToString(WORLD_ACCESS)); + fmt.format(" %4d", Integer.valueOf(getHardLinkCount())); + fmt.format(" %-8s %-8s", getUser(), getGroup()); + fmt.format(" %8d", Long.valueOf(getSize())); + Calendar timestamp = getTimestamp(); + if (timestamp != null) { + if (timezone != null) { + final TimeZone newZone = TimeZone.getTimeZone(timezone); + if (!newZone.equals(timestamp.getTimeZone())) { + final Date original = timestamp.getTime(); + final Calendar newStamp = Calendar.getInstance(newZone); + newStamp.setTime(original); + timestamp = newStamp; + } } - } - fmt.format(" %1$tY-%1$tm-%1$td", timestamp); - // Only display time units if they are present - if (timestamp.isSet(Calendar.HOUR_OF_DAY)) { - fmt.format(" %1$tH", timestamp); - if (timestamp.isSet(Calendar.MINUTE)) { - fmt.format(":%1$tM", timestamp); - if (timestamp.isSet(Calendar.SECOND)) { - fmt.format(":%1$tS", timestamp); - if (timestamp.isSet(Calendar.MILLISECOND)) { - fmt.format(".%1$tL", timestamp); + fmt.format(" %1$tY-%1$tm-%1$td", timestamp); + // Only display time units if they are present + if (timestamp.isSet(Calendar.HOUR_OF_DAY)) { + fmt.format(" %1$tH", timestamp); + if (timestamp.isSet(Calendar.MINUTE)) { + fmt.format(":%1$tM", timestamp); + if (timestamp.isSet(Calendar.SECOND)) { + fmt.format(":%1$tS", timestamp); + if (timestamp.isSet(Calendar.MILLISECOND)) { + fmt.format(".%1$tL", timestamp); + } } } + fmt.format(" %1$tZ", timestamp); } - fmt.format(" %1$tZ", timestamp); } + sb.append(' '); + sb.append(getName()); } - sb.append(' '); - sb.append(getName()); - fmt.close(); return sb.toString(); } diff --git a/src/main/java/org/apache/commons/net/ftp/FTPListParseEngine.java b/src/main/java/org/apache/commons/net/ftp/FTPListParseEngine.java index 6542ea2..a8e625e 100644 --- a/src/main/java/org/apache/commons/net/ftp/FTPListParseEngine.java +++ b/src/main/java/org/apache/commons/net/ftp/FTPListParseEngine.java @@ -136,17 +136,16 @@ public class FTPListParseEngine { */ private void readStream(final InputStream stream, final String encoding) throws IOException { - final BufferedReader reader = new BufferedReader( - new InputStreamReader(stream, Charsets.toCharset(encoding))); + try (final BufferedReader reader = new BufferedReader( + new InputStreamReader(stream, Charsets.toCharset(encoding)))) { - String line = this.parser.readNextEntry(reader); + String line = this.parser.readNextEntry(reader); - while (line != null) - { - this.entries.add(line); - line = this.parser.readNextEntry(reader); + while (line != null) { + this.entries.add(line); + line = this.parser.readNextEntry(reader); + } } - reader.close(); } /** diff --git a/src/main/java/org/apache/commons/net/nntp/NNTPClient.java b/src/main/java/org/apache/commons/net/nntp/NNTPClient.java index 82504ef..036972e 100644 --- a/src/main/java/org/apache/commons/net/nntp/NNTPClient.java +++ b/src/main/java/org/apache/commons/net/nntp/NNTPClient.java @@ -244,13 +244,12 @@ public class NNTPClient extends NNTP private NewsgroupInfo[] __readNewsgroupListing() throws IOException { - final BufferedReader reader = new DotTerminatedMessageReader(_reader_); // Start of with a big vector because we may be reading a very large // amount of groups. final Vector<NewsgroupInfo> list = new Vector<>(2048); String line; - try { + try (final BufferedReader reader = new DotTerminatedMessageReader(_reader_)) { while ((line = reader.readLine()) != null) { final NewsgroupInfo tmp = __parseNewsgroupListEntry(line); if (tmp != null) { @@ -259,8 +258,6 @@ public class NNTPClient extends NNTP throw new MalformedServerReplyException(line); } } - } finally { - reader.close(); } int size; if ((size = list.size()) < 1) { @@ -769,12 +766,11 @@ public class NNTPClient extends NNTP return null; } - final StringWriter help = new StringWriter(); - final BufferedReader reader = new DotTerminatedMessageReader(_reader_); - Util.copyReader(reader, help); - reader.close(); - help.close(); - return help.toString(); + try (final StringWriter help = new StringWriter(); + final BufferedReader reader = new DotTerminatedMessageReader(_reader_)) { + Util.copyReader(reader, help); + return help.toString(); + } } /** @@ -785,18 +781,18 @@ public class NNTPClient extends NNTP */ public String[] listOverviewFmt() throws IOException { - if (!NNTPReply.isPositiveCompletion(sendCommand("LIST", "OVERVIEW.FMT"))){ + if (!NNTPReply.isPositiveCompletion(sendCommand("LIST", "OVERVIEW.FMT"))) { return null; } - final BufferedReader reader = new DotTerminatedMessageReader(_reader_); - String line; - final ArrayList<String> list = new ArrayList<>(); - while((line=reader.readLine()) != null) { - list.add(line); + try (final BufferedReader reader = new DotTerminatedMessageReader(_reader_)) { + String line; + final ArrayList<String> list = new ArrayList<>(); + while ((line = reader.readLine()) != null) { + list.add(line); + } + return list.toArray(new String[list.size()]); } - reader.close(); - return list.toArray(new String[list.size()]); } /*** @@ -1258,22 +1254,18 @@ public class NNTPClient extends NNTP public String[] listNewNews(final NewGroupsOrNewsQuery query) throws IOException { - if (!NNTPReply.isPositiveCompletion( - newnews(query.getNewsgroups(), query.getDate(), query.getTime(), - query.isGMT(), query.getDistributions()))) { + if (!NNTPReply.isPositiveCompletion(newnews(query.getNewsgroups(), query.getDate(), query.getTime(), + query.isGMT(), query.getDistributions()))) { return null; } final Vector<String> list = new Vector<>(); - final BufferedReader reader = new DotTerminatedMessageReader(_reader_); + try (final BufferedReader reader = new DotTerminatedMessageReader(_reader_)) { - String line; - try { + String line; while ((line = reader.readLine()) != null) { list.addElement(line); } - } finally { - reader.close(); } final int size = list.size(); diff --git a/src/main/java/org/apache/commons/net/smtp/SMTPClient.java b/src/main/java/org/apache/commons/net/smtp/SMTPClient.java index bdf447f..4abf4a3 100644 --- a/src/main/java/org/apache/commons/net/smtp/SMTPClient.java +++ b/src/main/java/org/apache/commons/net/smtp/SMTPClient.java @@ -388,17 +388,15 @@ public class SMTPClient extends SMTP ***/ public boolean sendShortMessageData(final String message) throws IOException { - Writer writer; + try (Writer writer = sendMessageData()) { - writer = sendMessageData(); + if (writer == null) { + return false; + } - if (writer == null) { - return false; + writer.write(message); } - writer.write(message); - writer.close(); - return completePendingCommand(); }
