From f4409332778a94486d2fef98a6b94ded5d2fc116 Mon Sep 17 00:00:00 2001 From: Dominik Stadler Date: Mon, 2 Apr 2018 17:16:01 +0000 Subject: [PATCH] Close resources in tests and in case of Exceptions and use try-with-resources. Close the socket-connection during encrpyting/decrypting as soon as it is not needed any more. git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1828178 13f79535-47bb-0310-9956-ffa450edef68 --- .../dsig/services/TSPTimeStampService.java | 83 ++++++++++--------- .../poi/extractor/TestExtractorFactory.java | 1 + .../poi/openxml4j/util/TestZipSecureFile.java | 18 ++-- .../poi/poifs/crypt/TestSignatureInfo.java | 25 ++---- .../poi/xssf/usermodel/TestSXSSFBugs.java | 4 +- .../apache/poi/hwpf/HWPFTestDataSamples.java | 71 +++++++--------- 6 files changed, 93 insertions(+), 109 deletions(-) diff --git a/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/services/TSPTimeStampService.java b/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/services/TSPTimeStampService.java index 9330c1948..7066f14cd 100644 --- a/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/services/TSPTimeStampService.java +++ b/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/services/TSPTimeStampService.java @@ -124,48 +124,53 @@ public class TSPTimeStampService implements TimeStampService { int port = proxyUrl.getPort(); proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(InetAddress.getByName(host), (port == -1 ? 80 : port))); } - + + ByteArrayOutputStream bos; + String contentType; HttpURLConnection huc = (HttpURLConnection)new URL(signatureConfig.getTspUrl()).openConnection(proxy); - - if (signatureConfig.getTspUser() != null) { - String userPassword = signatureConfig.getTspUser() + ":" + signatureConfig.getTspPass(); - String encoding = DatatypeConverter.printBase64Binary(userPassword.getBytes(StandardCharsets.ISO_8859_1)); - huc.setRequestProperty("Authorization", "Basic " + encoding); + try { + if (signatureConfig.getTspUser() != null) { + String userPassword = signatureConfig.getTspUser() + ":" + signatureConfig.getTspPass(); + String encoding = DatatypeConverter.printBase64Binary(userPassword.getBytes(StandardCharsets.ISO_8859_1)); + huc.setRequestProperty("Authorization", "Basic " + encoding); + } + + huc.setRequestMethod("POST"); + huc.setConnectTimeout(20000); + huc.setReadTimeout(20000); + huc.setDoOutput(true); // also sets method to POST. + huc.setRequestProperty("User-Agent", signatureConfig.getUserAgent()); + huc.setRequestProperty("Content-Type", signatureConfig.isTspOldProtocol() + ? "application/timestamp-request" + : "application/timestamp-query"); // "; charset=ISO-8859-1"); + + OutputStream hucOut = huc.getOutputStream(); + hucOut.write(encodedRequest); + + // invoke TSP service + huc.connect(); + + int statusCode = huc.getResponseCode(); + if (statusCode != 200) { + LOG.log(POILogger.ERROR, "Error contacting TSP server ", signatureConfig.getTspUrl() + + ", had status code " + statusCode + "/" + huc.getResponseMessage()); + throw new IOException("Error contacting TSP server " + signatureConfig.getTspUrl() + + ", had status code " + statusCode + "/" + huc.getResponseMessage()); + } + + // HTTP input validation + contentType = huc.getHeaderField("Content-Type"); + if (null == contentType) { + throw new RuntimeException("missing Content-Type header"); + } + + bos = new ByteArrayOutputStream(); + IOUtils.copy(huc.getInputStream(), bos); + LOG.log(POILogger.DEBUG, "response content: ", HexDump.dump(bos.toByteArray(), 0, 0)); + } finally { + huc.disconnect(); } - huc.setRequestMethod("POST"); - huc.setConnectTimeout(20000); - huc.setReadTimeout(20000); - huc.setDoOutput(true); // also sets method to POST. - huc.setRequestProperty("User-Agent", signatureConfig.getUserAgent()); - huc.setRequestProperty("Content-Type", signatureConfig.isTspOldProtocol() - ? "application/timestamp-request" - : "application/timestamp-query"); // "; charset=ISO-8859-1"); - - OutputStream hucOut = huc.getOutputStream(); - hucOut.write(encodedRequest); - - // invoke TSP service - huc.connect(); - - int statusCode = huc.getResponseCode(); - if (statusCode != 200) { - LOG.log(POILogger.ERROR, "Error contacting TSP server ", signatureConfig.getTspUrl() + - ", had status code " + statusCode + "/" + huc.getResponseMessage()); - throw new IOException("Error contacting TSP server " + signatureConfig.getTspUrl() + - ", had status code " + statusCode + "/" + huc.getResponseMessage()); - } - - // HTTP input validation - String contentType = huc.getHeaderField("Content-Type"); - if (null == contentType) { - throw new RuntimeException("missing Content-Type header"); - } - - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - IOUtils.copy(huc.getInputStream(), bos); - LOG.log(POILogger.DEBUG, "response content: ", HexDump.dump(bos.toByteArray(), 0, 0)); - if (!contentType.startsWith(signatureConfig.isTspOldProtocol() ? "application/timestamp-response" : "application/timestamp-reply" diff --git a/src/ooxml/testcases/org/apache/poi/extractor/TestExtractorFactory.java b/src/ooxml/testcases/org/apache/poi/extractor/TestExtractorFactory.java index 345762b37..3670f6fc7 100644 --- a/src/ooxml/testcases/org/apache/poi/extractor/TestExtractorFactory.java +++ b/src/ooxml/testcases/org/apache/poi/extractor/TestExtractorFactory.java @@ -806,6 +806,7 @@ public class TestExtractorFactory { ExtractorFactory.createExtractor(xlsEmb); embeds = ExtractorFactory.getEmbededDocsTextExtractors(ext); assertNotNull(embeds); + ext.close(); // Excel ext = (POIOLE2TextExtractor) diff --git a/src/ooxml/testcases/org/apache/poi/openxml4j/util/TestZipSecureFile.java b/src/ooxml/testcases/org/apache/poi/openxml4j/util/TestZipSecureFile.java index 249ff01dc..eb19cecb3 100644 --- a/src/ooxml/testcases/org/apache/poi/openxml4j/util/TestZipSecureFile.java +++ b/src/ooxml/testcases/org/apache/poi/openxml4j/util/TestZipSecureFile.java @@ -33,16 +33,16 @@ public class TestZipSecureFile { // ClassCastException in ZipFile now // The relevant change in the JDK is http://hg.openjdk.java.net/jdk/jdk10/rev/85ea7e83af30#l5.66 - ZipFile thresholdInputStream = new ZipFile(XSSFTestDataSamples.getSampleFile("template.xlsx")); + try (ZipFile thresholdInputStream = new ZipFile(XSSFTestDataSamples.getSampleFile("template.xlsx"))) { + try (ZipSecureFile secureFile = new ZipSecureFile(XSSFTestDataSamples.getSampleFile("template.xlsx"))) { + Enumeration entries = thresholdInputStream.entries(); + while (entries.hasMoreElements()) { + ZipEntry entry = entries.nextElement(); - ZipSecureFile secureFile = new ZipSecureFile(XSSFTestDataSamples.getSampleFile("template.xlsx")); - - Enumeration entries = thresholdInputStream.entries(); - while (entries.hasMoreElements()) { - ZipEntry entry = entries.nextElement(); - - InputStream inputStream = secureFile.getInputStream(entry); - assertTrue(inputStream.available() > 0); + InputStream inputStream = secureFile.getInputStream(entry); + assertTrue(inputStream.available() > 0); + } + } } } } diff --git a/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java b/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java index 3db9b4f83..51b863dce 100644 --- a/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java +++ b/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java @@ -113,7 +113,7 @@ public class TestSignatureInfo { } @BeforeClass - public static void initBouncy() throws IOException { + public static void initBouncy() { CryptoFunctions.registerBouncyCastle(); // Set cal to now ... only set to fixed date for debugging ... @@ -164,7 +164,7 @@ public class TestSignatureInfo { Calendar cal = LocaleUtil.getLocaleCalendar(LocaleUtil.TIMEZONE_UTC); cal.clear(); cal.setTimeZone(LocaleUtil.TIMEZONE_UTC); - cal.set(2017, 6, 1); + cal.set(2017, Calendar.JULY, 1); SignatureConfig signatureConfig = prepareConfig("test", "CN=Test", pfxInput); signatureConfig.setExecutionTime(cal.getTime()); @@ -440,7 +440,7 @@ public class TestSignatureInfo { if (mockTsp) { TimeStampService tspService = new TimeStampService(){ @Override - public byte[] timeStamp(byte[] data, RevocationData revocationData) throws Exception { + public byte[] timeStamp(byte[] data, RevocationData revocationData) { revocationData.addCRL(crl); return "time-stamp-token".getBytes(LocaleUtil.CHARSET_1252); } @@ -451,14 +451,10 @@ public class TestSignatureInfo { }; signatureConfig.setTspService(tspService); } else { - TimeStampServiceValidator tspValidator = new TimeStampServiceValidator() { - @Override - public void validate(List validateChain, - RevocationData revocationData) throws Exception { - for (X509Certificate certificate : validateChain) { - LOG.log(POILogger.DEBUG, "certificate: " + certificate.getSubjectX500Principal()); - LOG.log(POILogger.DEBUG, "validity: " + certificate.getNotBefore() + " - " + certificate.getNotAfter()); - } + TimeStampServiceValidator tspValidator = (validateChain, revocationData) -> { + for (X509Certificate certificate : validateChain) { + LOG.log(POILogger.DEBUG, "certificate: " + certificate.getSubjectX500Principal()); + LOG.log(POILogger.DEBUG, "validity: " + certificate.getNotBefore() + " - " + certificate.getNotAfter()); } }; signatureConfig.setTspValidator(tspValidator); @@ -471,12 +467,7 @@ public class TestSignatureInfo { x509, x509, keyPair.getPrivate(), "SHA1withRSA", cal.getTimeInMillis()); revocationData.addOCSP(ocspResp.getEncoded()); - RevocationDataService revocationDataService = new RevocationDataService(){ - @Override - public RevocationData getRevocationData(List revocationChain) { - return revocationData; - } - }; + RevocationDataService revocationDataService = revocationChain -> revocationData; signatureConfig.setRevocationDataService(revocationDataService); // operate diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestSXSSFBugs.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestSXSSFBugs.java index bb9a9a6a4..3958aa2f6 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestSXSSFBugs.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestSXSSFBugs.java @@ -113,8 +113,8 @@ public final class TestSXSSFBugs extends BaseTestBugzillaIssues { writeWorkbook(new XSSFWorkbook(), XSSFITestDataProvider.instance); // does not work - try { - writeWorkbook(new SXSSFWorkbook(), SXSSFITestDataProvider.instance); + try (SXSSFWorkbook wb = new SXSSFWorkbook()) { + writeWorkbook(wb, SXSSFITestDataProvider.instance); fail("Should catch exception here"); } catch (RuntimeException e) { // this is not implemented yet diff --git a/src/scratchpad/testcases/org/apache/poi/hwpf/HWPFTestDataSamples.java b/src/scratchpad/testcases/org/apache/poi/hwpf/HWPFTestDataSamples.java index 997844778..8f1e8c12c 100644 --- a/src/scratchpad/testcases/org/apache/poi/hwpf/HWPFTestDataSamples.java +++ b/src/scratchpad/testcases/org/apache/poi/hwpf/HWPFTestDataSamples.java @@ -37,7 +37,12 @@ public class HWPFTestDataSamples { public static HWPFDocument openSampleFile(String sampleFileName) { try { InputStream is = POIDataSamples.getDocumentInstance().openResourceAsStream(sampleFileName); - return new HWPFDocument(is); + try { + return new HWPFDocument(is); + } catch (Throwable e) { + is.close(); + throw e; + } } catch (IOException e) { throw new RuntimeException(e); } @@ -48,42 +53,33 @@ public class HWPFTestDataSamples { final long start = System.currentTimeMillis(); try { - ZipInputStream is = new ZipInputStream( POIDataSamples + try (ZipInputStream is = new ZipInputStream(POIDataSamples .getDocumentInstance() - .openResourceAsStream( sampleFileName ) ); - try - { + .openResourceAsStream(sampleFileName))) { is.getNextEntry(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); - try - { - IOUtils.copy( is, baos ); - } - finally - { + try { + IOUtils.copy(is, baos); + } finally { baos.close(); } final long endUnzip = System.currentTimeMillis(); byte[] byteArray = baos.toByteArray(); - logger.log( POILogger.DEBUG, "Unzipped in ", - Long.valueOf( endUnzip - start ), " ms -- ", - Long.valueOf( byteArray.length ), " byte(s)" ); + logger.log(POILogger.DEBUG, "Unzipped in ", + Long.valueOf(endUnzip - start), " ms -- ", + Long.valueOf(byteArray.length), " byte(s)"); - ByteArrayInputStream bais = new ByteArrayInputStream( byteArray ); - HWPFDocument doc = new HWPFDocument( bais ); + ByteArrayInputStream bais = new ByteArrayInputStream(byteArray); + HWPFDocument doc = new HWPFDocument(bais); final long endParse = System.currentTimeMillis(); - logger.log( POILogger.DEBUG, "Parsed in ", - Long.valueOf( endParse - start ), " ms" ); + logger.log(POILogger.DEBUG, "Parsed in ", + Long.valueOf(endParse - start), " ms"); return doc; } - finally - { - is.close(); - } } catch ( IOException e ) { @@ -105,39 +101,30 @@ public class HWPFTestDataSamples { { logger.log(POILogger.DEBUG, "Downloading ", sampleFileUrl, " ..."); - InputStream is = new URL( sampleFileUrl ).openStream(); - try - { + try (InputStream is = new URL(sampleFileUrl).openStream()) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); - try - { - IOUtils.copy( is, baos ); - } - finally - { + try { + IOUtils.copy(is, baos); + } finally { baos.close(); } final long endDownload = System.currentTimeMillis(); byte[] byteArray = baos.toByteArray(); - logger.log( POILogger.DEBUG, "Downloaded in ", - Long.valueOf( endDownload - start ), " ms -- ", - Long.valueOf( byteArray.length ), " byte(s)" ); + logger.log(POILogger.DEBUG, "Downloaded in ", + Long.valueOf(endDownload - start), " ms -- ", + Long.valueOf(byteArray.length), " byte(s)"); - ByteArrayInputStream bais = new ByteArrayInputStream( byteArray ); - HWPFDocument doc = new HWPFDocument( bais ); + ByteArrayInputStream bais = new ByteArrayInputStream(byteArray); + HWPFDocument doc = new HWPFDocument(bais); final long endParse = System.currentTimeMillis(); - logger.log( POILogger.DEBUG, "Parsed in ", - Long.valueOf( endParse - start ), " ms" ); + logger.log(POILogger.DEBUG, "Parsed in ", + Long.valueOf(endParse - start), " ms"); return doc; } - finally - { - is.close(); - } } catch ( IOException e ) {