diff --git a/src/integrationtest/org/apache/poi/TestAllFiles.java b/src/integrationtest/org/apache/poi/TestAllFiles.java index bd77c3a2d..39a2069b2 100644 --- a/src/integrationtest/org/apache/poi/TestAllFiles.java +++ b/src/integrationtest/org/apache/poi/TestAllFiles.java @@ -199,6 +199,7 @@ public class TestAllFiles { //EXPECTED_FAILURES.add("poifs/protected_sha512.xlsx"); //EXPECTED_FAILURES.add("poifs/extenxls_pwd123.xlsx"); //EXPECTED_FAILURES.add("poifs/protected_agile.docx"); + EXPECTED_FAILURES.add("spreadsheet/58616.xlsx"); // TODO: fails XMLExportTest, is this ok? EXPECTED_FAILURES.add("spreadsheet/CustomXMLMapping-singleattributenamespace.xlsx"); diff --git a/src/java/org/apache/poi/poifs/crypt/standard/StandardDecryptor.java b/src/java/org/apache/poi/poifs/crypt/standard/StandardDecryptor.java index 1d6ddd398..00d2f77e3 100644 --- a/src/java/org/apache/poi/poifs/crypt/standard/StandardDecryptor.java +++ b/src/java/org/apache/poi/poifs/crypt/standard/StandardDecryptor.java @@ -127,6 +127,9 @@ public class StandardDecryptor extends Decryptor { _length = dis.readLong(); + if(getSecretKey() == null) { + verifyPassword(null); + } // limit wrong calculated ole entries - (bug #57080) // standard encryption always uses aes encoding, so blockSize is always 16 // http://stackoverflow.com/questions/3283787/size-of-data-after-aes-encryption diff --git a/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestDecryptor.java b/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestDecryptor.java index ed7df2ed8..d2260dc99 100644 --- a/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestDecryptor.java +++ b/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestDecryptor.java @@ -22,6 +22,7 @@ import static org.junit.Assert.assertTrue; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; +import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.security.GeneralSecurityException; @@ -33,6 +34,7 @@ import org.apache.poi.poifs.filesystem.DirectoryNode; import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.util.IOUtils; +import org.apache.poi.xssf.XSSFTestDataSamples; import org.junit.Test; /** @@ -151,4 +153,13 @@ public class TestDecryptor { zis.close(); fs.close(); } + + @Test + public void test58616() throws IOException, GeneralSecurityException { + POIFSFileSystem pfs = new POIFSFileSystem(new FileInputStream(XSSFTestDataSamples.getSampleFile("58616.xlsx"))); + EncryptionInfo info = new EncryptionInfo(pfs); + Decryptor dec = Decryptor.getInstance(info); + //dec.verifyPassword(null); + dec.getDataStream(pfs); + } } \ No newline at end of file diff --git a/test-data/spreadsheet/58616.xlsx b/test-data/spreadsheet/58616.xlsx new file mode 100644 index 000000000..9ab573927 Binary files /dev/null and b/test-data/spreadsheet/58616.xlsx differ