From 5e6b975b1c3938bfa32b369e7eb82cd1359fec62 Mon Sep 17 00:00:00 2001 From: Dominik Stadler Date: Tue, 22 Sep 2015 19:50:37 +0000 Subject: [PATCH] Ensure that the ThreadLocal-Biff-Password is reset correctly after each usage, we had some unit tests failing sporadically due to this git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1704710 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/poi/hssf/record/RecordFactoryInputStream.java | 2 -- .../java/org/apache/poi/ss/usermodel/WorkbookFactory.java | 8 +++++--- .../apache/poi/hslf/record/TestDocumentEncryption.java | 2 ++ .../poi/hssf/eventusermodel/TestHSSFEventFactory.java | 7 +++++++ .../org/apache/poi/hssf/extractor/TestExcelExtractor.java | 6 ++++++ .../poi/hssf/record/TestRecordFactoryInputStream.java | 6 ++++++ .../apache/poi/hssf/record/crypto/TestXorEncryption.java | 7 +++++++ src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java | 6 ++++++ 8 files changed, 39 insertions(+), 5 deletions(-) diff --git a/src/java/org/apache/poi/hssf/record/RecordFactoryInputStream.java b/src/java/org/apache/poi/hssf/record/RecordFactoryInputStream.java index 61aa24769..263bdeeee 100644 --- a/src/java/org/apache/poi/hssf/record/RecordFactoryInputStream.java +++ b/src/java/org/apache/poi/hssf/record/RecordFactoryInputStream.java @@ -55,8 +55,6 @@ public final class RecordFactoryInputStream { private final Record _lastRecord; private final boolean _hasBOFRecord; - private static POILogger log = POILogFactory.getLogger(StreamEncryptionInfo.class); - public StreamEncryptionInfo(RecordInputStream rs, List outputRecs) { Record rec; rs.nextRecord(); diff --git a/src/ooxml/java/org/apache/poi/ss/usermodel/WorkbookFactory.java b/src/ooxml/java/org/apache/poi/ss/usermodel/WorkbookFactory.java index 8188b0287..1817b176a 100644 --- a/src/ooxml/java/org/apache/poi/ss/usermodel/WorkbookFactory.java +++ b/src/ooxml/java/org/apache/poi/ss/usermodel/WorkbookFactory.java @@ -121,9 +121,11 @@ public class WorkbookFactory { if (password != null) { Biff8EncryptionKey.setCurrentUserPassword(password); } - Workbook wb = new HSSFWorkbook(root, true); - Biff8EncryptionKey.setCurrentUserPassword(null); - return wb; + try { + return new HSSFWorkbook(root, true); + } finally { + Biff8EncryptionKey.setCurrentUserPassword(null); + } } /** diff --git a/src/scratchpad/testcases/org/apache/poi/hslf/record/TestDocumentEncryption.java b/src/scratchpad/testcases/org/apache/poi/hslf/record/TestDocumentEncryption.java index e27c808f6..b7e6ea947 100644 --- a/src/scratchpad/testcases/org/apache/poi/hslf/record/TestDocumentEncryption.java +++ b/src/scratchpad/testcases/org/apache/poi/hslf/record/TestDocumentEncryption.java @@ -47,6 +47,7 @@ import org.apache.poi.poifs.crypt.HashAlgorithm; import org.apache.poi.poifs.crypt.cryptoapi.CryptoAPIEncryptionHeader; import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; import org.apache.poi.poifs.filesystem.POIFSFileSystem; +import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -57,6 +58,7 @@ public class TestDocumentEncryption { POIDataSamples slTests = POIDataSamples.getSlideShowInstance(); @Before + @After // also afterwards to not affect other tests running in the same JVM public void resetPassword() { Biff8EncryptionKey.setCurrentUserPassword(null); } diff --git a/src/testcases/org/apache/poi/hssf/eventusermodel/TestHSSFEventFactory.java b/src/testcases/org/apache/poi/hssf/eventusermodel/TestHSSFEventFactory.java index 0a111beaa..08c1babe0 100644 --- a/src/testcases/org/apache/poi/hssf/eventusermodel/TestHSSFEventFactory.java +++ b/src/testcases/org/apache/poi/hssf/eventusermodel/TestHSSFEventFactory.java @@ -36,6 +36,7 @@ import org.apache.poi.hssf.record.SelectionRecord; import org.apache.poi.hssf.record.WindowTwoRecord; import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey; import org.apache.poi.poifs.filesystem.POIFSFileSystem; +import org.junit.After; /** * Testing for {@link HSSFEventFactory} @@ -45,6 +46,12 @@ public final class TestHSSFEventFactory extends TestCase { return HSSFTestDataSamples.openSampleFileStream(sampleFileName); } + // to not affect other tests running in the same JVM + @After + public void resetPassword() { + Biff8EncryptionKey.setCurrentUserPassword(null); + } + public void testWithMissingRecords() throws Exception { HSSFRequest req = new HSSFRequest(); diff --git a/src/testcases/org/apache/poi/hssf/extractor/TestExcelExtractor.java b/src/testcases/org/apache/poi/hssf/extractor/TestExcelExtractor.java index 15f4a3cb0..2a5698881 100644 --- a/src/testcases/org/apache/poi/hssf/extractor/TestExcelExtractor.java +++ b/src/testcases/org/apache/poi/hssf/extractor/TestExcelExtractor.java @@ -32,12 +32,18 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.DirectoryNode; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.util.LocaleUtil; +import org.junit.After; import org.junit.Test; /** * */ public final class TestExcelExtractor { + // to not affect other tests running in the same JVM + @After + public void resetPassword() { + Biff8EncryptionKey.setCurrentUserPassword(null); + } @SuppressWarnings("resource") private static ExcelExtractor createExtractor(String sampleFileName) throws IOException { diff --git a/src/testcases/org/apache/poi/hssf/record/TestRecordFactoryInputStream.java b/src/testcases/org/apache/poi/hssf/record/TestRecordFactoryInputStream.java index c2ad641bc..0e441e195 100644 --- a/src/testcases/org/apache/poi/hssf/record/TestRecordFactoryInputStream.java +++ b/src/testcases/org/apache/poi/hssf/record/TestRecordFactoryInputStream.java @@ -25,6 +25,7 @@ import java.io.ByteArrayInputStream; import org.apache.poi.EncryptedDocumentException; import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey; import org.apache.poi.util.HexRead; +import org.junit.After; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; @@ -35,6 +36,11 @@ import org.junit.rules.ExpectedException; * @author Josh Micich */ public final class TestRecordFactoryInputStream { + // to not affect other tests running in the same JVM + @After + public void resetPassword() { + Biff8EncryptionKey.setCurrentUserPassword(null); + } /** * Hex dump of a BOF record and most of a FILEPASS record. diff --git a/src/testcases/org/apache/poi/hssf/record/crypto/TestXorEncryption.java b/src/testcases/org/apache/poi/hssf/record/crypto/TestXorEncryption.java index e763a1830..e79f2fcc6 100644 --- a/src/testcases/org/apache/poi/hssf/record/crypto/TestXorEncryption.java +++ b/src/testcases/org/apache/poi/hssf/record/crypto/TestXorEncryption.java @@ -27,12 +27,19 @@ import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.crypt.CryptoFunctions; import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; import org.apache.poi.util.HexRead; +import org.junit.After; import org.junit.Test; public class TestXorEncryption { private static HSSFTestDataSamples samples = new HSSFTestDataSamples(); + // to not affect other tests running in the same JVM + @After + public void resetPassword() { + Biff8EncryptionKey.setCurrentUserPassword(null); + } + @Test public void testXorEncryption() throws Exception { // Xor-Password: abc diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java index 3b753bc8a..37d592f69 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java @@ -74,6 +74,7 @@ import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.util.LocaleUtil; +import org.junit.After; import org.junit.Ignore; import org.junit.Test; @@ -85,6 +86,11 @@ import org.junit.Test; * define the test in the base class {@link BaseTestBugzillaIssues} */ public final class TestBugs extends BaseTestBugzillaIssues { + // to not affect other tests running in the same JVM + @After + public void resetPassword() { + Biff8EncryptionKey.setCurrentUserPassword(null); + } public TestBugs() { super(HSSFITestDataProvider.instance);