commit ce19c16543b410cedf3216ba477537d28cc3c818 Author: fava fava@libertymail.net Date: Thu Aug 22 05:28:44 2019 +0000
Fix leaking resource in DescriptorReaderImpl.java
Fix leaking resource in DescriptorReaderImpl.java using try-with-resource statement. This fix is related to analysis on metrics-lib using sonarqube Implements part of #30544 --- .../descriptor/impl/DescriptorReaderImpl.java | 70 ++++++++++++---------- 1 file changed, 37 insertions(+), 33 deletions(-)
diff --git a/src/main/java/org/torproject/descriptor/impl/DescriptorReaderImpl.java b/src/main/java/org/torproject/descriptor/impl/DescriptorReaderImpl.java index b8eb191..90ef2c6 100644 --- a/src/main/java/org/torproject/descriptor/impl/DescriptorReaderImpl.java +++ b/src/main/java/org/torproject/descriptor/impl/DescriptorReaderImpl.java @@ -281,41 +281,45 @@ public class DescriptorReaderImpl implements DescriptorReader { }
private void readTarball(File file) throws IOException { - FileInputStream in = new FileInputStream(file); - if (in.available() <= 0) { - return; - } - TarArchiveInputStream tais; - if (file.getName().endsWith(".tar.bz2")) { - tais = new TarArchiveInputStream(new BZip2CompressorInputStream(in)); - } else if (file.getName().endsWith(".tar.xz")) { - tais = new TarArchiveInputStream(new XZCompressorInputStream(in)); - } else if (file.getName().endsWith(".tar")) { - tais = new TarArchiveInputStream(in); - } else { - return; - } - BufferedInputStream bis = new BufferedInputStream(tais); - TarArchiveEntry tae; - while ((tae = tais.getNextTarEntry()) != null) { - if (tae.isDirectory()) { - continue; + try (FileInputStream in = new FileInputStream(file)) { + if (in.available() <= 0) { + return; } - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - int len; - byte[] data = new byte[1024]; - while ((len = bis.read(data, 0, 1024)) >= 0) { - baos.write(data, 0, len); + TarArchiveInputStream tais; + if (file.getName().endsWith(".tar.bz2")) { + tais = new TarArchiveInputStream(new BZip2CompressorInputStream(in)); + } else if (file.getName().endsWith(".tar.xz")) { + tais = new TarArchiveInputStream(new XZCompressorInputStream(in)); + } else if (file.getName().endsWith(".tar")) { + tais = new TarArchiveInputStream(in); + } else { + return; } - byte[] rawDescriptorBytes = baos.toByteArray(); - if (rawDescriptorBytes.length < 1) { - continue; - } - String fileName = tae.getName().substring( - tae.getName().lastIndexOf("/") + 1); - for (Descriptor descriptor : this.descriptorParser.parseDescriptors( - rawDescriptorBytes, file, fileName)) { - this.descriptorQueue.add(descriptor); + try (BufferedInputStream bis = new BufferedInputStream(tais)) { + TarArchiveEntry tae; + while ((tae = tais.getNextTarEntry()) != null) { + if (tae.isDirectory()) { + continue; + } + try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) { + int len; + byte[] data = new byte[1024]; + while ((len = bis.read(data, 0, 1024)) >= 0) { + baos.write(data, 0, len); + } + byte[] rawDescriptorBytes = baos.toByteArray(); + if (rawDescriptorBytes.length < 1) { + continue; + } + String fileName = tae.getName().substring( + tae.getName().lastIndexOf("/") + 1); + for (Descriptor descriptor : + this.descriptorParser.parseDescriptors( + rawDescriptorBytes, file, fileName)) { + this.descriptorQueue.add(descriptor); + } + } + } } } }
tor-commits@lists.torproject.org