From 28e662c5a72180e39c28b9d8cf457ea90185de50 Mon Sep 17 00:00:00 2001 From: Andreas Beeker Date: Tue, 1 May 2018 18:22:00 +0000 Subject: [PATCH] Cleanup Biff8EncryptionKey usage and use HPSF constants instead of duplicated strings git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1830705 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/poi/hpsf/examples/ReadTitle.java | 3 +- .../poi/poifs/crypt/TestHxxFEncryption.java | 131 ++++++------ .../apache/poi/TestPOIDocumentScratchpad.java | 6 +- .../hslf/record/TestDocumentEncryption.java | 196 +++++++++--------- .../org/apache/poi/TestPOIDocumentMain.java | 6 +- .../org/apache/poi/hpsf/basic/TestBasic.java | 4 +- .../poi/hpsf/basic/TestEmptyProperties.java | 2 +- .../apache/poi/hpsf/basic/TestUnicode.java | 2 +- .../poi/hssf/dev/BaseXLSIteratingTest.java | 3 - .../eventusermodel/TestHSSFEventFactory.java | 76 ++++--- .../hssf/extractor/TestExcelExtractor.java | 9 +- .../record/TestRecordFactoryInputStream.java | 32 ++- .../apache/poi/hssf/usermodel/TestBugs.java | 10 +- .../poi/hssf/usermodel/TestCryptoAPI.java | 31 ++- .../TestNonStandardWorkbookStreamNames.java | 10 +- .../poi/poifs/crypt/TestXorEncryption.java | 26 +-- .../poifs/property/TestDocumentProperty.java | 6 +- .../poi/poifs/property/TestPropertyTable.java | 7 +- 18 files changed, 265 insertions(+), 295 deletions(-) diff --git a/src/examples/src/org/apache/poi/hpsf/examples/ReadTitle.java b/src/examples/src/org/apache/poi/hpsf/examples/ReadTitle.java index d4f38a1d13..7e0c447f07 100644 --- a/src/examples/src/org/apache/poi/hpsf/examples/ReadTitle.java +++ b/src/examples/src/org/apache/poi/hpsf/examples/ReadTitle.java @@ -46,8 +46,7 @@ public class ReadTitle { final String filename = args[0]; POIFSReader r = new POIFSReader(); - r.registerListener(new MyPOIFSReaderListener(), - "\005SummaryInformation"); + r.registerListener(new MyPOIFSReaderListener(), SummaryInformation.DEFAULT_STREAM_NAME); r.read(new FileInputStream(filename)); } diff --git a/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestHxxFEncryption.java b/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestHxxFEncryption.java index 7403ecc3d7..0ca785d8d0 100644 --- a/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestHxxFEncryption.java +++ b/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestHxxFEncryption.java @@ -52,11 +52,6 @@ import org.junit.runners.Parameterized.Parameters; @RunWith(Parameterized.class) public class TestHxxFEncryption { - @AfterClass - public static void clearPass() { - Biff8EncryptionKey.setCurrentUserPassword(null); - } - @Parameter(value = 0) public POIDataSamples sampleDir; @@ -99,12 +94,14 @@ public class TestHxxFEncryption { @Test public void extract() throws IOException, OpenXML4JException, XmlException { - Biff8EncryptionKey.setCurrentUserPassword(password); File f = sampleDir.getFile(file); - POITextExtractor te = ExtractorFactory.createExtractor(f); - String actual = te.getText().trim(); - assertEquals(expected, actual); - te.close(); + Biff8EncryptionKey.setCurrentUserPassword(password); + try (POITextExtractor te = ExtractorFactory.createExtractor(f)) { + String actual = te.getText().trim(); + assertEquals(expected, actual); + } finally { + Biff8EncryptionKey.setCurrentUserPassword(null); + } } @Test @@ -118,70 +115,72 @@ public class TestHxxFEncryption { } public void newPassword(String newPass) throws IOException, OpenXML4JException, XmlException { - Biff8EncryptionKey.setCurrentUserPassword(password); File f = sampleDir.getFile(file); - POITextExtractor te1 = ExtractorFactory.createExtractor(f); - Biff8EncryptionKey.setCurrentUserPassword(newPass); - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - POIDocument doc = (POIDocument)te1.getDocument(); - doc.write(bos); - doc.close(); - te1.close(); - ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); - POITextExtractor te2 = ExtractorFactory.createExtractor(bis); - String actual = te2.getText().trim(); - assertEquals(expected, actual); - te2.close(); + Biff8EncryptionKey.setCurrentUserPassword(password); + try (POITextExtractor te1 = ExtractorFactory.createExtractor(f)) { + Biff8EncryptionKey.setCurrentUserPassword(newPass); + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + try (POIDocument doc = (POIDocument) te1.getDocument()) { + doc.write(bos); + } + ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); + try (POITextExtractor te2 = ExtractorFactory.createExtractor(bis)) { + String actual = te2.getText().trim(); + assertEquals(expected, actual); + } + } finally { + Biff8EncryptionKey.setCurrentUserPassword(null); + } } /** changing the encryption mode and key size in poor mans style - see comments below */ @Test public void changeEncryption() throws IOException, OpenXML4JException, XmlException { + File f = sampleDir.getFile(file); ByteArrayOutputStream bos = new ByteArrayOutputStream(); Biff8EncryptionKey.setCurrentUserPassword(password); - File f = sampleDir.getFile(file); - POITextExtractor te1 = ExtractorFactory.createExtractor(f); - // first remove encryption - Biff8EncryptionKey.setCurrentUserPassword(null); - POIDocument doc = (POIDocument)te1.getDocument(); - doc.write(bos); - doc.close(); - te1.close(); - // then use default setting, which is cryptoapi - String newPass = "newPass"; - POITextExtractor te2 = ExtractorFactory.createExtractor(new ByteArrayInputStream(bos.toByteArray())); - Biff8EncryptionKey.setCurrentUserPassword(newPass); - doc = (POIDocument)te2.getDocument(); - bos.reset(); - doc.write(bos); - doc.close(); - te2.close(); - // and finally update cryptoapi setting - POITextExtractor te3 = ExtractorFactory.createExtractor(new ByteArrayInputStream(bos.toByteArray())); - doc = (POIDocument)te3.getDocument(); - // need to cache data (i.e. read all data) before changing the key size - if (doc instanceof HSLFSlideShowImpl) { - HSLFSlideShowImpl hss = (HSLFSlideShowImpl)doc; - hss.getPictureData(); - hss.getDocumentSummaryInformation(); + try (POITextExtractor te1 = ExtractorFactory.createExtractor(f)) { + // first remove encryption + Biff8EncryptionKey.setCurrentUserPassword(null); + try (POIDocument doc = (POIDocument) te1.getDocument()) { + doc.write(bos); + } + // then use default setting, which is cryptoapi + String newPass = "newPass"; + try (POITextExtractor te2 = ExtractorFactory.createExtractor(new ByteArrayInputStream(bos.toByteArray()))) { + Biff8EncryptionKey.setCurrentUserPassword(newPass); + try (POIDocument doc = (POIDocument) te2.getDocument()) { + bos.reset(); + doc.write(bos); + } + } + // and finally update cryptoapi setting + try (POITextExtractor te3 = ExtractorFactory.createExtractor(new ByteArrayInputStream(bos.toByteArray())); + POIDocument doc = (POIDocument) te3.getDocument()) { + // need to cache data (i.e. read all data) before changing the key size + if (doc instanceof HSLFSlideShowImpl) { + HSLFSlideShowImpl hss = (HSLFSlideShowImpl) doc; + hss.getPictureData(); + hss.getDocumentSummaryInformation(); + } + EncryptionInfo ei = doc.getEncryptionInfo(); + assertNotNull(ei); + assertTrue(ei.getHeader() instanceof CryptoAPIEncryptionHeader); + assertEquals(0x28, ei.getHeader().getKeySize()); + ei.getHeader().setKeySize(0x78); + bos.reset(); + doc.write(bos); + } + // check the setting + try (POITextExtractor te4 = ExtractorFactory.createExtractor(new ByteArrayInputStream(bos.toByteArray())); + POIDocument doc = (POIDocument) te4.getDocument()) { + EncryptionInfo ei = doc.getEncryptionInfo(); + assertNotNull(ei); + assertTrue(ei.getHeader() instanceof CryptoAPIEncryptionHeader); + assertEquals(0x78, ei.getHeader().getKeySize()); + } + } finally { + Biff8EncryptionKey.setCurrentUserPassword(null); } - EncryptionInfo ei = doc.getEncryptionInfo(); - assertNotNull(ei); - assertTrue(ei.getHeader() instanceof CryptoAPIEncryptionHeader); - assertEquals(0x28, ei.getHeader().getKeySize()); - ei.getHeader().setKeySize(0x78); - bos.reset(); - doc.write(bos); - doc.close(); - te3.close(); - // check the setting - POITextExtractor te4 = ExtractorFactory.createExtractor(new ByteArrayInputStream(bos.toByteArray())); - doc = (POIDocument)te4.getDocument(); - ei = doc.getEncryptionInfo(); - assertNotNull(ei); - assertTrue(ei.getHeader() instanceof CryptoAPIEncryptionHeader); - assertEquals(0x78, ei.getHeader().getKeySize()); - doc.close(); - te4.close(); } } diff --git a/src/scratchpad/testcases/org/apache/poi/TestPOIDocumentScratchpad.java b/src/scratchpad/testcases/org/apache/poi/TestPOIDocumentScratchpad.java index 152fd0405c..5cfb54d106 100644 --- a/src/scratchpad/testcases/org/apache/poi/TestPOIDocumentScratchpad.java +++ b/src/scratchpad/testcases/org/apache/poi/TestPOIDocumentScratchpad.java @@ -28,7 +28,9 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; +import org.apache.poi.hpsf.DocumentSummaryInformation; import org.apache.poi.hpsf.HPSFPropertiesOnlyDocument; +import org.apache.poi.hpsf.SummaryInformation; import org.apache.poi.hslf.usermodel.HSLFSlideShowImpl; import org.apache.poi.hwpf.HWPFTestDataSamples; import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; @@ -91,8 +93,8 @@ public final class TestPOIDocumentScratchpad { doc.writeProperties(outFS); // Should now hold them - assertNotNull(outFS.createDocumentInputStream("\005SummaryInformation")); - assertNotNull(outFS.createDocumentInputStream("\005DocumentSummaryInformation")); + assertNotNull(outFS.createDocumentInputStream(SummaryInformation.DEFAULT_STREAM_NAME)); + assertNotNull(outFS.createDocumentInputStream(DocumentSummaryInformation.DEFAULT_STREAM_NAME)); outFS.close(); } 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 a53173a8a5..4fe1c4d051 100644 --- a/src/scratchpad/testcases/org/apache/poi/hslf/record/TestDocumentEncryption.java +++ b/src/scratchpad/testcases/org/apache/poi/hslf/record/TestDocumentEncryption.java @@ -59,94 +59,90 @@ import org.junit.Test; 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); - } - @Test public void cryptoAPIDecryptionOther() throws Exception { - Biff8EncryptionKey.setCurrentUserPassword("hello"); String encPpts[] = { "Password_Protected-56-hello.ppt", "Password_Protected-hello.ppt", "Password_Protected-np-hello.ppt", }; - for (String pptFile : encPpts) { - try { - NPOIFSFileSystem fs = new NPOIFSFileSystem(slTests.getFile(pptFile), true); - HSLFSlideShowImpl hss = new HSLFSlideShowImpl(fs); - new HSLFSlideShow(hss).close(); - fs.close(); - } catch (EncryptedPowerPointFileException e) { - fail(pptFile+" can't be decrypted"); + Biff8EncryptionKey.setCurrentUserPassword("hello"); + try { + for (String pptFile : encPpts) { + try (NPOIFSFileSystem fs = new NPOIFSFileSystem(slTests.getFile(pptFile), true); + HSLFSlideShow ppt = new HSLFSlideShow(fs)) { + assertTrue(ppt.getSlides().size() > 0); + } catch (EncryptedPowerPointFileException e) { + fail(pptFile + " can't be decrypted"); + } } + } finally { + Biff8EncryptionKey.setCurrentUserPassword(null); } - // password is reset in @After } @Test public void cryptoAPIChangeKeySize() throws Exception { String pptFile = "cryptoapi-proc2356.ppt"; Biff8EncryptionKey.setCurrentUserPassword("crypto"); - NPOIFSFileSystem fs = new NPOIFSFileSystem(slTests.getFile(pptFile), true); - HSLFSlideShowImpl hss = new HSLFSlideShowImpl(fs); - // need to cache data (i.e. read all data) before changing the key size - List picsExpected = hss.getPictureData(); - hss.getDocumentSummaryInformation(); - DocumentEncryptionAtom documentEncryptionAtom = hss.getDocumentEncryptionAtom(); - assertNotNull(documentEncryptionAtom); - EncryptionInfo ei = documentEncryptionAtom.getEncryptionInfo(); - ((CryptoAPIEncryptionHeader) ei.getHeader()).setKeySize(0x78); + try (NPOIFSFileSystem fs = new NPOIFSFileSystem(slTests.getFile(pptFile), true); + HSLFSlideShowImpl hss = new HSLFSlideShowImpl(fs)) { + // need to cache data (i.e. read all data) before changing the key size + List picsExpected = hss.getPictureData(); + hss.getDocumentSummaryInformation(); + DocumentEncryptionAtom documentEncryptionAtom = hss.getDocumentEncryptionAtom(); + assertNotNull(documentEncryptionAtom); + EncryptionInfo ei = documentEncryptionAtom.getEncryptionInfo(); + ((CryptoAPIEncryptionHeader) ei.getHeader()).setKeySize(0x78); - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - hss.write(bos); - hss.close(); - fs.close(); + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + hss.write(bos); - fs = new NPOIFSFileSystem(new ByteArrayInputStream(bos.toByteArray())); - hss = new HSLFSlideShowImpl(fs); - List picsActual = hss.getPictureData(); + try (NPOIFSFileSystem fs2 = new NPOIFSFileSystem(new ByteArrayInputStream(bos.toByteArray())); + HSLFSlideShowImpl hss2 = new HSLFSlideShowImpl(fs2)) { + List picsActual = hss2.getPictureData(); - assertEquals(picsExpected.size(), picsActual.size()); - for (int i = 0; i < picsExpected.size(); i++) { - assertArrayEquals(picsExpected.get(i).getRawData(), picsActual.get(i).getRawData()); + assertEquals(picsExpected.size(), picsActual.size()); + for (int i = 0; i < picsExpected.size(); i++) { + assertArrayEquals(picsExpected.get(i).getRawData(), picsActual.get(i).getRawData()); + } + } + } finally { + Biff8EncryptionKey.setCurrentUserPassword(null); } - hss.close(); - fs.close(); - // password is reset in @After } @Test public void cryptoAPIEncryption() throws Exception { /* documents with multiple edits need to be normalized for encryption */ String pptFile = "57272_corrupted_usereditatom.ppt"; - NPOIFSFileSystem fs = new NPOIFSFileSystem(slTests.getFile(pptFile), true); - HSLFSlideShowImpl hss = new HSLFSlideShowImpl(fs); - hss.normalizeRecords(); - - // normalized ppt - ByteArrayOutputStream expected = new ByteArrayOutputStream(); - hss.write(expected); - - // encrypted - Biff8EncryptionKey.setCurrentUserPassword("hello"); ByteArrayOutputStream encrypted = new ByteArrayOutputStream(); - hss.write(encrypted); - hss.close(); - fs.close(); - - // decrypted - ByteArrayInputStream bis = new ByteArrayInputStream(encrypted.toByteArray()); - fs = new NPOIFSFileSystem(bis); - hss = new HSLFSlideShowImpl(fs); - Biff8EncryptionKey.setCurrentUserPassword(null); + ByteArrayOutputStream expected = new ByteArrayOutputStream(); ByteArrayOutputStream actual = new ByteArrayOutputStream(); - hss.write(actual); - hss.close(); - fs.close(); + try { + try (NPOIFSFileSystem fs = new NPOIFSFileSystem(slTests.getFile(pptFile), true); + HSLFSlideShowImpl hss = new HSLFSlideShowImpl(fs)) { + hss.normalizeRecords(); + + // normalized ppt + hss.write(expected); + + // encrypted + Biff8EncryptionKey.setCurrentUserPassword("hello"); + hss.write(encrypted); + } + + // decrypted + ByteArrayInputStream bis = new ByteArrayInputStream(encrypted.toByteArray()); + try (NPOIFSFileSystem fs = new NPOIFSFileSystem(bis); + HSLFSlideShowImpl hss = new HSLFSlideShowImpl(fs)) { + Biff8EncryptionKey.setCurrentUserPassword(null); + hss.write(actual); + } + } finally { + Biff8EncryptionKey.setCurrentUserPassword(null); + } assertArrayEquals(expected.toByteArray(), actual.toByteArray()); } @@ -156,49 +152,49 @@ public class TestDocumentEncryption { // taken from a msdn blog: // http://blogs.msdn.com/b/openspecification/archive/2009/05/08/dominic-salemno.aspx Biff8EncryptionKey.setCurrentUserPassword("crypto"); - NPOIFSFileSystem fs = new NPOIFSFileSystem(slTests.getFile("cryptoapi-proc2356.ppt")); - HSLFSlideShowImpl hss = new HSLFSlideShowImpl(fs); - HSLFSlideShow ss = new HSLFSlideShow(hss); + try (NPOIFSFileSystem fs = new NPOIFSFileSystem(slTests.getFile("cryptoapi-proc2356.ppt")); + HSLFSlideShow ss = new HSLFSlideShow(fs)) { - HSLFSlide slide = ss.getSlides().get(0); - String rawText = HSLFTextParagraph.getRawText(slide.getTextParagraphs().get(0)); - assertEquals("Dominic Salemno", rawText); + HSLFSlide slide = ss.getSlides().get(0); + String rawText = HSLFTextParagraph.getRawText(slide.getTextParagraphs().get(0)); + assertEquals("Dominic Salemno", rawText); - String picCmp[][] = { - {"0", "nKsDTKqxTCR8LFkVVWlP9GSTvZ0="}, - {"95163", "SuNOR+9V1UVYZIoeD65l3VTaLoc="}, - {"100864", "Ql3IGrr4bNq07ZTp5iPg7b+pva8="}, - {"714114", "8pdst9NjBGSfWezSZE8+aVhIRe0="}, - {"723752", "go6xqW7lvkCtlOO5tYLiMfb4oxw="}, - {"770128", "gZUM8YqRNL5kGNfyyYvEEernvCc="}, - {"957958", "CNU2iiqUFAnk3TDXsXV1ihH9eRM="}, - }; + String picCmp[][] = { + {"0", "nKsDTKqxTCR8LFkVVWlP9GSTvZ0="}, + {"95163", "SuNOR+9V1UVYZIoeD65l3VTaLoc="}, + {"100864", "Ql3IGrr4bNq07ZTp5iPg7b+pva8="}, + {"714114", "8pdst9NjBGSfWezSZE8+aVhIRe0="}, + {"723752", "go6xqW7lvkCtlOO5tYLiMfb4oxw="}, + {"770128", "gZUM8YqRNL5kGNfyyYvEEernvCc="}, + {"957958", "CNU2iiqUFAnk3TDXsXV1ihH9eRM="}, + }; - MessageDigest md = CryptoFunctions.getMessageDigest(HashAlgorithm.sha1); - List pd = hss.getPictureData(); - int i = 0; - for (HSLFPictureData p : pd) { - byte hash[] = md.digest(p.getData()); - assertEquals(Integer.parseInt(picCmp[i][0]), p.getOffset()); - assertEquals(picCmp[i][1], Base64.encodeBase64String(hash)); - i++; + MessageDigest md = CryptoFunctions.getMessageDigest(HashAlgorithm.sha1); + List pd = ss.getSlideShowImpl().getPictureData(); + int i = 0; + for (HSLFPictureData p : pd) { + byte hash[] = md.digest(p.getData()); + assertEquals(Integer.parseInt(picCmp[i][0]), p.getOffset()); + assertEquals(picCmp[i][1], Base64.encodeBase64String(hash)); + i++; + } + + DocumentEncryptionAtom dea = ss.getSlideShowImpl().getDocumentEncryptionAtom(); + assertNotNull(dea); + + CryptoAPIDecryptor dec = (CryptoAPIDecryptor) dea.getEncryptionInfo().getDecryptor(); + try (POIFSFileSystem fs2 = dec.getSummaryEntries(fs.getRoot(), "EncryptedSummary")) { + PropertySet ps = PropertySetFactory.create(fs2.getRoot(), SummaryInformation.DEFAULT_STREAM_NAME); + assertNotNull(ps); + assertTrue(ps.isSummaryInformation()); + assertEquals("RC4 CryptoAPI Encryption", ps.getProperties()[1].getValue()); + ps = PropertySetFactory.create(fs2.getRoot(), DocumentSummaryInformation.DEFAULT_STREAM_NAME); + assertNotNull(ps); + assertTrue(ps.isDocumentSummaryInformation()); + assertEquals("On-screen Show (4:3)", ps.getProperties()[1].getValue()); + } + } finally { + Biff8EncryptionKey.setCurrentUserPassword(null); } - - DocumentEncryptionAtom dea = hss.getDocumentEncryptionAtom(); - assertNotNull(dea); - - POIFSFileSystem fs2 = ((CryptoAPIDecryptor) dea.getEncryptionInfo().getDecryptor()).getSummaryEntries(fs.getRoot(), "EncryptedSummary"); - PropertySet ps = PropertySetFactory.create(fs2.getRoot(), SummaryInformation.DEFAULT_STREAM_NAME); - assertNotNull(ps); - assertTrue(ps.isSummaryInformation()); - assertEquals("RC4 CryptoAPI Encryption", ps.getProperties()[1].getValue()); - ps = PropertySetFactory.create(fs2.getRoot(), DocumentSummaryInformation.DEFAULT_STREAM_NAME); - assertNotNull(ps); - assertTrue(ps.isDocumentSummaryInformation()); - assertEquals("On-screen Show (4:3)", ps.getProperties()[1].getValue()); - ss.close(); - fs.close(); - fs2.close(); - // password is reset in @After } } diff --git a/src/testcases/org/apache/poi/TestPOIDocumentMain.java b/src/testcases/org/apache/poi/TestPOIDocumentMain.java index 83668b5c70..8910f4ed52 100644 --- a/src/testcases/org/apache/poi/TestPOIDocumentMain.java +++ b/src/testcases/org/apache/poi/TestPOIDocumentMain.java @@ -25,7 +25,9 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; +import org.apache.poi.hpsf.DocumentSummaryInformation; import org.apache.poi.hpsf.HPSFPropertiesOnlyDocument; +import org.apache.poi.hpsf.SummaryInformation; import org.apache.poi.hssf.HSSFTestDataSamples; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; @@ -89,10 +91,10 @@ public final class TestPOIDocumentMain { // Should now hold them assertNotNull( - outFS.createDocumentInputStream("\005SummaryInformation") + outFS.createDocumentInputStream(SummaryInformation.DEFAULT_STREAM_NAME) ); assertNotNull( - outFS.createDocumentInputStream("\005DocumentSummaryInformation") + outFS.createDocumentInputStream(DocumentSummaryInformation.DEFAULT_STREAM_NAME) ); } diff --git a/src/testcases/org/apache/poi/hpsf/basic/TestBasic.java b/src/testcases/org/apache/poi/hpsf/basic/TestBasic.java index dcb5c67b92..0bc08772ed 100644 --- a/src/testcases/org/apache/poi/hpsf/basic/TestBasic.java +++ b/src/testcases/org/apache/poi/hpsf/basic/TestBasic.java @@ -53,8 +53,8 @@ public final class TestBasic { private static final POIDataSamples samples = POIDataSamples.getHPSFInstance(); private static final String[] POI_FILES = { - "\005SummaryInformation", - "\005DocumentSummaryInformation", + SummaryInformation.DEFAULT_STREAM_NAME, + DocumentSummaryInformation.DEFAULT_STREAM_NAME, "WordDocument", "\001CompObj", "1Table" diff --git a/src/testcases/org/apache/poi/hpsf/basic/TestEmptyProperties.java b/src/testcases/org/apache/poi/hpsf/basic/TestEmptyProperties.java index 4e9eec6271..92e82d32e0 100644 --- a/src/testcases/org/apache/poi/hpsf/basic/TestEmptyProperties.java +++ b/src/testcases/org/apache/poi/hpsf/basic/TestEmptyProperties.java @@ -56,7 +56,7 @@ public final class TestEmptyProperties { private static final String[] POI_FILES = { "PerfectOffice_MAIN", - "\005SummaryInformation", + SummaryInformation.DEFAULT_STREAM_NAME, "Main" }; diff --git a/src/testcases/org/apache/poi/hpsf/basic/TestUnicode.java b/src/testcases/org/apache/poi/hpsf/basic/TestUnicode.java index 69e4367bbf..3e3eafd495 100644 --- a/src/testcases/org/apache/poi/hpsf/basic/TestUnicode.java +++ b/src/testcases/org/apache/poi/hpsf/basic/TestUnicode.java @@ -43,7 +43,7 @@ public class TestUnicode { static final String POI_FS = "TestUnicode.xls"; static final String[] POI_FILES = { - "\005DocumentSummaryInformation", + DocumentSummaryInformation.DEFAULT_STREAM_NAME, }; File data; POIFile[] poiFiles; diff --git a/src/testcases/org/apache/poi/hssf/dev/BaseXLSIteratingTest.java b/src/testcases/org/apache/poi/hssf/dev/BaseXLSIteratingTest.java index d740a8a37e..c87bf45e67 100644 --- a/src/testcases/org/apache/poi/hssf/dev/BaseXLSIteratingTest.java +++ b/src/testcases/org/apache/poi/hssf/dev/BaseXLSIteratingTest.java @@ -90,9 +90,6 @@ public abstract class BaseXLSIteratingTest { @Test public void testMain() throws Exception { - // we had intermittent problems when this was set differently somehow, let's try to set it here so it always is set correctly for these tests - Biff8EncryptionKey.setCurrentUserPassword(null); - String fileName = file.getName(); if (EXCLUDED.containsKey(fileName)) { thrown.expect(EXCLUDED.get(fileName)); diff --git a/src/testcases/org/apache/poi/hssf/eventusermodel/TestHSSFEventFactory.java b/src/testcases/org/apache/poi/hssf/eventusermodel/TestHSSFEventFactory.java index bf66cecef4..459cfe90ec 100644 --- a/src/testcases/org/apache/poi/hssf/eventusermodel/TestHSSFEventFactory.java +++ b/src/testcases/org/apache/poi/hssf/eventusermodel/TestHSSFEventFactory.java @@ -46,12 +46,6 @@ 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(); @@ -156,7 +150,6 @@ public final class TestHSSFEventFactory extends TestCase { req.addListenerForAllRecords(mockListen); // Without a password, can't be read - Biff8EncryptionKey.setCurrentUserPassword(null); POIFSFileSystem fs = new POIFSFileSystem(openSample("xor-encryption-abc.xls")); HSSFEventFactory factory = new HSSFEventFactory(); @@ -168,44 +161,47 @@ public final class TestHSSFEventFactory extends TestCase { // With the password, is properly processed Biff8EncryptionKey.setCurrentUserPassword("abc"); + try { + req = new HSSFRequest(); + mockListen = new MockHSSFListener(); + req.addListenerForAllRecords(mockListen); + factory.processWorkbookEvents(req, fs); - req = new HSSFRequest(); - mockListen = new MockHSSFListener(); - req.addListenerForAllRecords(mockListen); - factory.processWorkbookEvents(req, fs); + // Check we got the sheet and the contents + Record[] recs = mockListen.getRecords(); + assertTrue(recs.length > 50); - // Check we got the sheet and the contents - Record[] recs = mockListen.getRecords(); - assertTrue( recs.length > 50 ); - - // Has one sheet, with values 1,2,3 in column A rows 1-3 - boolean hasSheet=false, hasA1=false, hasA2=false, hasA3=false; - for (Record r : recs) { - if (r instanceof BoundSheetRecord) { - BoundSheetRecord bsr = (BoundSheetRecord)r; - assertEquals("Sheet1", bsr.getSheetname()); - hasSheet = true; - } - if (r instanceof NumberRecord) { - NumberRecord nr = (NumberRecord)r; - if (nr.getColumn() == 0 && nr.getRow() == 0) { - assertEquals(1, (int)nr.getValue()); - hasA1 = true; + // Has one sheet, with values 1,2,3 in column A rows 1-3 + boolean hasSheet = false, hasA1 = false, hasA2 = false, hasA3 = false; + for (Record r : recs) { + if (r instanceof BoundSheetRecord) { + BoundSheetRecord bsr = (BoundSheetRecord) r; + assertEquals("Sheet1", bsr.getSheetname()); + hasSheet = true; } - if (nr.getColumn() == 0 && nr.getRow() == 1) { - assertEquals(2, (int)nr.getValue()); - hasA2 = true; - } - if (nr.getColumn() == 0 && nr.getRow() == 2) { - assertEquals(3, (int)nr.getValue()); - hasA3 = true; + if (r instanceof NumberRecord) { + NumberRecord nr = (NumberRecord) r; + if (nr.getColumn() == 0 && nr.getRow() == 0) { + assertEquals(1, (int) nr.getValue()); + hasA1 = true; + } + if (nr.getColumn() == 0 && nr.getRow() == 1) { + assertEquals(2, (int) nr.getValue()); + hasA2 = true; + } + if (nr.getColumn() == 0 && nr.getRow() == 2) { + assertEquals(3, (int) nr.getValue()); + hasA3 = true; + } } } + + assertTrue("Sheet record not found", hasSheet); + assertTrue("Numeric record for A1 not found", hasA1); + assertTrue("Numeric record for A2 not found", hasA2); + assertTrue("Numeric record for A3 not found", hasA3); + } finally { + Biff8EncryptionKey.setCurrentUserPassword(null); } - - assertTrue("Sheet record not found", hasSheet); - assertTrue("Numeric record for A1 not found", hasA1); - assertTrue("Numeric record for A2 not found", hasA2); - assertTrue("Numeric record for A3 not found", hasA3); } } diff --git a/src/testcases/org/apache/poi/hssf/extractor/TestExcelExtractor.java b/src/testcases/org/apache/poi/hssf/extractor/TestExcelExtractor.java index faebefb848..fd9c49dc12 100644 --- a/src/testcases/org/apache/poi/hssf/extractor/TestExcelExtractor.java +++ b/src/testcases/org/apache/poi/hssf/extractor/TestExcelExtractor.java @@ -41,12 +41,6 @@ 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); - } - private static ExcelExtractor createExtractor(String sampleFileName) throws IOException { File file = HSSFTestDataSamples.getSampleFile(sampleFileName); POIFSFileSystem fs = new POIFSFileSystem(file); @@ -355,9 +349,10 @@ public final class TestExcelExtractor { Biff8EncryptionKey.setCurrentUserPassword("password"); try (ExcelExtractor extractor = createExtractor("password.xls")) { String text = extractor.getText(); + assertContains(text, "ZIP"); + } finally { Biff8EncryptionKey.setCurrentUserPassword(null); - assertContains(text, "ZIP"); } } diff --git a/src/testcases/org/apache/poi/hssf/record/TestRecordFactoryInputStream.java b/src/testcases/org/apache/poi/hssf/record/TestRecordFactoryInputStream.java index 4cfdfcf242..a716717ad9 100644 --- a/src/testcases/org/apache/poi/hssf/record/TestRecordFactoryInputStream.java +++ b/src/testcases/org/apache/poi/hssf/record/TestRecordFactoryInputStream.java @@ -36,12 +36,6 @@ 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. * A 16 byte saltHash should be added to complete the second record @@ -82,7 +76,6 @@ public final class TestRecordFactoryInputStream { + SAMPLE_WINDOW1_ENCR1 ); - Biff8EncryptionKey.setCurrentUserPassword(null); expectedEx.expect(EncryptedDocumentException.class); expectedEx.expectMessage("Default password is invalid for salt/verifier/verifierHash"); createRFIS(dataWrongDefault); @@ -100,7 +93,6 @@ public final class TestRecordFactoryInputStream { + SAMPLE_WINDOW1_ENCR1 ); - Biff8EncryptionKey.setCurrentUserPassword(null); RecordFactoryInputStream rfis = createRFIS(dataCorrectDefault); confirmReadInitialRecords(rfis); } @@ -121,12 +113,15 @@ public final class TestRecordFactoryInputStream { + SAMPLE_WINDOW1_ENCR2 ); + expectedEx.expect(EncryptedDocumentException.class); + expectedEx.expectMessage("Supplied password is invalid for salt/verifier/verifierHash"); Biff8EncryptionKey.setCurrentUserPassword("passw0rd"); - - expectedEx.expect(EncryptedDocumentException.class); - expectedEx.expectMessage("Supplied password is invalid for salt/verifier/verifierHash"); - createRFIS(dataWrongDefault); + try { + createRFIS(dataWrongDefault); + } finally { + Biff8EncryptionKey.setCurrentUserPassword(null); + } } @Test @@ -135,18 +130,19 @@ public final class TestRecordFactoryInputStream { final String SAMPLE_WINDOW1_ENCR2 = "3D 00 12 00" + "45, B9, 90, FE, B6, C6, EC, 73, EE, 3F, 52, 45, 97, DB, E3, C1, D6, FE"; - Biff8EncryptionKey.setCurrentUserPassword("passw0rd"); - byte[] dataCorrectDefault = HexRead.readFromString("" + COMMON_HEX_DATA + "C728659A C38E35E0 568A338F C3FC9D70" // correct saltHash for supplied password (and docId/saltHash) + SAMPLE_WINDOW1_ENCR2 ); - RecordFactoryInputStream rfis = createRFIS(dataCorrectDefault); - Biff8EncryptionKey.setCurrentUserPassword(null); - - confirmReadInitialRecords(rfis); + Biff8EncryptionKey.setCurrentUserPassword("passw0rd"); + try { + RecordFactoryInputStream rfis = createRFIS(dataCorrectDefault); + confirmReadInitialRecords(rfis); + } finally { + Biff8EncryptionKey.setCurrentUserPassword(null); + } } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java index 2f620eac95..53802f5069 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java @@ -102,12 +102,6 @@ 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); } @@ -2207,8 +2201,6 @@ public final class TestBugs extends BaseTestBugzillaIssues { */ @Test public void bug50833() throws Exception { - Biff8EncryptionKey.setCurrentUserPassword(null); - HSSFWorkbook wb1 = openSample("50833.xls"); HSSFSheet s = wb1.getSheetAt(0); assertEquals("Sheet1", s.getSheetName()); @@ -2602,8 +2594,8 @@ public final class TestBugs extends BaseTestBugzillaIssues { @Test(expected = EncryptedDocumentException.class) public void bug35897() throws Exception { // password is abc + Biff8EncryptionKey.setCurrentUserPassword("abc"); try { - Biff8EncryptionKey.setCurrentUserPassword("abc"); openSample("xor-encryption-abc.xls").close(); } finally { Biff8EncryptionKey.setCurrentUserPassword(null); diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestCryptoAPI.java b/src/testcases/org/apache/poi/hssf/usermodel/TestCryptoAPI.java index 3baafa8b39..92e5f64472 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestCryptoAPI.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestCryptoAPI.java @@ -30,11 +30,6 @@ import org.junit.Test; public class TestCryptoAPI { final HSSFITestDataProvider ssTests = HSSFITestDataProvider.instance; - @AfterClass - public static void resetPW() { - Biff8EncryptionKey.setCurrentUserPassword(null); - } - @Test public void bug59857() throws IOException { // XOR-Obfuscation @@ -52,19 +47,17 @@ public class TestCryptoAPI { private void validateContent(String wbFile, String password, String textExpected) throws IOException { Biff8EncryptionKey.setCurrentUserPassword(password); - HSSFWorkbook wb = ssTests.openSampleWorkbook(wbFile); - ExcelExtractor ee1 = new ExcelExtractor(wb); - String textActual = ee1.getText(); - assertContains(textActual, textExpected); - - Biff8EncryptionKey.setCurrentUserPassword("bla"); - HSSFWorkbook wbBla = ssTests.writeOutAndReadBack(wb); - ExcelExtractor ee2 = new ExcelExtractor(wbBla); - textActual = ee2.getText(); - assertContains(textActual, textExpected); - ee2.close(); - ee1.close(); - wbBla.close(); - wb.close(); + try (HSSFWorkbook wb = ssTests.openSampleWorkbook(wbFile); + ExcelExtractor ee1 = new ExcelExtractor(wb) + ) { + Biff8EncryptionKey.setCurrentUserPassword("bla"); + try (HSSFWorkbook wbBla = ssTests.writeOutAndReadBack(wb); + ExcelExtractor ee2 = new ExcelExtractor(wbBla)) { + assertContains(ee1.getText(), textExpected); + assertContains(ee2.getText(), textExpected); + } + } finally { + Biff8EncryptionKey.setCurrentUserPassword(null); + } } } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestNonStandardWorkbookStreamNames.java b/src/testcases/org/apache/poi/hssf/usermodel/TestNonStandardWorkbookStreamNames.java index 0a84947b4c..80c0750c42 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestNonStandardWorkbookStreamNames.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestNonStandardWorkbookStreamNames.java @@ -23,8 +23,12 @@ import static org.junit.Assert.assertTrue; import java.io.IOException; import java.io.InputStream; +import org.apache.poi.hpsf.SummaryInformation; import org.apache.poi.hssf.HSSFTestDataSamples; +import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey; import org.apache.poi.poifs.filesystem.DirectoryNode; +import org.apache.poi.poifs.filesystem.Entry; +import org.junit.BeforeClass; import org.junit.Test; /** @@ -49,7 +53,7 @@ public final class TestNonStandardWorkbookStreamNames { // Ensure that we have a WORKBOOK entry and a summary assertTrue(root.hasEntry("WORKBOOK")); - assertTrue(root.hasEntry("\005SummaryInformation")); + assertTrue(root.hasEntry(SummaryInformation.DEFAULT_STREAM_NAME)); // But not a Workbook one assertFalse(root.hasEntry("Workbook")); @@ -73,7 +77,7 @@ public final class TestNonStandardWorkbookStreamNames { // But not a Workbook one and not a Summary one assertFalse(root.hasEntry("Workbook")); - assertFalse(root.hasEntry("\\005SummaryInformation")); + assertFalse(root.hasEntry(SummaryInformation.DEFAULT_STREAM_NAME)); wb.close(); } @@ -127,7 +131,7 @@ public final class TestNonStandardWorkbookStreamNames { assertFalse(root.hasEntry("WORKBOOK")); // As we preserved, should also have a few other streams - assertTrue(root.hasEntry("\005SummaryInformation")); + assertTrue(root.hasEntry(SummaryInformation.DEFAULT_STREAM_NAME)); wb2.close(); } } diff --git a/src/testcases/org/apache/poi/poifs/crypt/TestXorEncryption.java b/src/testcases/org/apache/poi/poifs/crypt/TestXorEncryption.java index 20dec4552f..002318b0eb 100644 --- a/src/testcases/org/apache/poi/poifs/crypt/TestXorEncryption.java +++ b/src/testcases/org/apache/poi/poifs/crypt/TestXorEncryption.java @@ -21,6 +21,7 @@ import static org.hamcrest.core.IsEqual.equalTo; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThat; +import java.io.File; import java.io.IOException; import org.apache.poi.hssf.HSSFTestDataSamples; @@ -36,12 +37,6 @@ public class TestXorEncryption { private static final 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 IOException { // Xor-Password: abc @@ -61,15 +56,16 @@ public class TestXorEncryption { @SuppressWarnings("static-access") @Test public void testUserFile() throws IOException { + File f = samples.getSampleFile("xor-encryption-abc.xls"); Biff8EncryptionKey.setCurrentUserPassword("abc"); - NPOIFSFileSystem fs = new NPOIFSFileSystem(samples.getSampleFile("xor-encryption-abc.xls"), true); - HSSFWorkbook hwb = new HSSFWorkbook(fs.getRoot(), true); - - HSSFSheet sh = hwb.getSheetAt(0); - assertEquals(1.0, sh.getRow(0).getCell(0).getNumericCellValue(), 0.0); - assertEquals(2.0, sh.getRow(1).getCell(0).getNumericCellValue(), 0.0); - assertEquals(3.0, sh.getRow(2).getCell(0).getNumericCellValue(), 0.0); - hwb.close(); - fs.close(); + try (NPOIFSFileSystem fs = new NPOIFSFileSystem(f, true); + HSSFWorkbook hwb = new HSSFWorkbook(fs.getRoot(), true)) { + HSSFSheet sh = hwb.getSheetAt(0); + assertEquals(1.0, sh.getRow(0).getCell(0).getNumericCellValue(), 0.0); + assertEquals(2.0, sh.getRow(1).getCell(0).getNumericCellValue(), 0.0); + assertEquals(3.0, sh.getRow(2).getCell(0).getNumericCellValue(), 0.0); + } finally { + Biff8EncryptionKey.setCurrentUserPassword(null); + } } } diff --git a/src/testcases/org/apache/poi/poifs/property/TestDocumentProperty.java b/src/testcases/org/apache/poi/poifs/property/TestDocumentProperty.java index bd0b30edde..d4442e859a 100644 --- a/src/testcases/org/apache/poi/poifs/property/TestDocumentProperty.java +++ b/src/testcases/org/apache/poi/poifs/property/TestDocumentProperty.java @@ -20,6 +20,8 @@ package org.apache.poi.poifs.property; import java.io.ByteArrayOutputStream; import java.io.IOException; +import org.apache.poi.hpsf.DocumentSummaryInformation; +import org.apache.poi.hpsf.SummaryInformation; import org.apache.poi.poifs.storage.RawDataUtil; import org.apache.poi.util.LocaleUtil; @@ -68,8 +70,8 @@ public final class TestDocumentProperty extends TestCase { byte[] input = RawDataUtil.decode(hexData); verifyReadingProperty(1, input, 128, "Workbook"); - verifyReadingProperty(2, input, 256, "\005SummaryInformation"); - verifyReadingProperty(3, input, 384, "\005DocumentSummaryInformation"); + verifyReadingProperty(2, input, 256, SummaryInformation.DEFAULT_STREAM_NAME); + verifyReadingProperty(3, input, 384, DocumentSummaryInformation.DEFAULT_STREAM_NAME); } private void verifyReadingProperty(int index, byte[] input, int offset, String name) diff --git a/src/testcases/org/apache/poi/poifs/property/TestPropertyTable.java b/src/testcases/org/apache/poi/poifs/property/TestPropertyTable.java index 3950ce07e2..74cc83f879 100644 --- a/src/testcases/org/apache/poi/poifs/property/TestPropertyTable.java +++ b/src/testcases/org/apache/poi/poifs/property/TestPropertyTable.java @@ -25,6 +25,8 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; +import org.apache.poi.hpsf.DocumentSummaryInformation; +import org.apache.poi.hpsf.SummaryInformation; import org.apache.poi.poifs.common.POIFSConstants; import org.apache.poi.poifs.storage.BlockAllocationTableReader; import org.apache.poi.poifs.storage.HeaderBlock; @@ -79,11 +81,10 @@ public final class TestPropertyTable { DocumentProperty workbook = new DocumentProperty("Workbook", 0x00046777); workbook.setStartBlock(0); - DocumentProperty summary1 = new DocumentProperty("\005SummaryInformation", 0x00001000); + DocumentProperty summary1 = new DocumentProperty(SummaryInformation.DEFAULT_STREAM_NAME, 0x00001000); summary1.setStartBlock(0x00000234); - DocumentProperty summary2 = new DocumentProperty("\005DocumentSummaryInformation", - 0x00001000); + DocumentProperty summary2 = new DocumentProperty(DocumentSummaryInformation.DEFAULT_STREAM_NAME, 0x00001000); summary2.setStartBlock(0x0000023C); table.addProperty(workbook);