From 3300ac2a56bf0a83f7f084c8f536eda1cc51a4f8 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Tue, 4 Nov 2014 23:22:50 +0000 Subject: [PATCH] FilePassRecord type of 4 is now documented as the same as 2 & 3, see bug #35897 git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1636776 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/poi/hssf/record/FilePassRecord.java | 2 ++ .../org/apache/poi/hssf/dev/TestBiffViewer.java | 1 + .../org/apache/poi/hssf/usermodel/TestBugs.java | 7 +++++++ test-data/spreadsheet/35897-type4.xls | Bin 0 -> 19968 bytes 4 files changed, 10 insertions(+) create mode 100644 test-data/spreadsheet/35897-type4.xls diff --git a/src/java/org/apache/poi/hssf/record/FilePassRecord.java b/src/java/org/apache/poi/hssf/record/FilePassRecord.java index 32ad6787e..59d144f8c 100644 --- a/src/java/org/apache/poi/hssf/record/FilePassRecord.java +++ b/src/java/org/apache/poi/hssf/record/FilePassRecord.java @@ -45,6 +45,7 @@ public final class FilePassRecord extends StandardRecord { private static final int ENCRYPTION_OTHER_RC4 = 1; private static final int ENCRYPTION_OTHER_CAPI_2 = 2; private static final int ENCRYPTION_OTHER_CAPI_3 = 3; + private static final int ENCRYPTION_OTHER_CAPI_4 = 4; private byte[] _salt; private byte[] _encryptedVerifier; @@ -60,6 +61,7 @@ public final class FilePassRecord extends StandardRecord { break; case ENCRYPTION_OTHER_CAPI_2: case ENCRYPTION_OTHER_CAPI_3: + case ENCRYPTION_OTHER_CAPI_4: throw new EncryptedDocumentException( "HSSF does not currently support CryptoAPI encryption"); default: diff --git a/src/testcases/org/apache/poi/hssf/dev/TestBiffViewer.java b/src/testcases/org/apache/poi/hssf/dev/TestBiffViewer.java index 9083fbdf7..ff8e18937 100644 --- a/src/testcases/org/apache/poi/hssf/dev/TestBiffViewer.java +++ b/src/testcases/org/apache/poi/hssf/dev/TestBiffViewer.java @@ -36,6 +36,7 @@ public class TestBiffViewer extends BaseXLSIteratingTest { SILENT_EXCLUDED.add("43493.xls"); // HSSFWorkbook cannot open it as well SILENT_EXCLUDED.add("password.xls"); SILENT_EXCLUDED.add("46904.xls"); + SILENT_EXCLUDED.add("35897-type4.xls"); // unsupported crypto api header SILENT_EXCLUDED.add("xor-encryption-abc.xls"); // unsupported XOR-encryption } diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java index 575e3b485..015c8c595 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java @@ -2460,6 +2460,13 @@ public final class TestBugs extends BaseTestBugzillaIssues { } finally { Biff8EncryptionKey.setCurrentUserPassword(null); } + + // One using the only-recently-documented encryption header type 4, + // and the RC4 CryptoAPI encryption header structure + try { + openSample("35897-type4.xls"); + fail("POI doesn't currently support the RC4 CryptoAPI encryption header structure"); + } catch (EncryptedDocumentException e) {} } @Test diff --git a/test-data/spreadsheet/35897-type4.xls b/test-data/spreadsheet/35897-type4.xls new file mode 100644 index 0000000000000000000000000000000000000000..c3eadbbc5f92b68ea998715253650f0f2cf4ff6d GIT binary patch literal 19968 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