Author: centic
Date: Sun Feb  5 21:11:14 2023
New Revision: 1907446

URL: http://svn.apache.org/viewvc?rev=1907446&view=rev
Log:
Do not fail if an empty password is provided

Modified:
    poi/trunk/poi/src/main/java/org/apache/poi/poifs/crypt/CryptoFunctions.java
    
poi/trunk/poi/src/test/java/org/apache/poi/poifs/crypt/TestXorEncryption.java

Modified: 
poi/trunk/poi/src/main/java/org/apache/poi/poifs/crypt/CryptoFunctions.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/poifs/crypt/CryptoFunctions.java?rev=1907446&r1=1907445&r2=1907446&view=diff
==============================================================================
--- poi/trunk/poi/src/main/java/org/apache/poi/poifs/crypt/CryptoFunctions.java 
(original)
+++ poi/trunk/poi/src/main/java/org/apache/poi/poifs/crypt/CryptoFunctions.java 
Sun Feb  5 21:11:14 2023
@@ -538,7 +538,11 @@ public final class CryptoFunctions {
         // The MS-OFFCRYPTO misses some infos about the various rotation sizes
         byte[] obfuscationArray = new byte[16];
         System.arraycopy(passBytes, 0, obfuscationArray, 0, passBytes.length);
-        System.arraycopy(PAD_ARRAY, 0, obfuscationArray, passBytes.length, 
PAD_ARRAY.length-passBytes.length+1);
+        if (passBytes.length == 0) {
+            System.arraycopy(PAD_ARRAY, 0, obfuscationArray, passBytes.length, 
PAD_ARRAY.length);
+        } else {
+            System.arraycopy(PAD_ARRAY, 0, obfuscationArray, passBytes.length, 
PAD_ARRAY.length - passBytes.length + 1);
+        }
 
         int xorKey = createXorKey1(password);
 

Modified: 
poi/trunk/poi/src/test/java/org/apache/poi/poifs/crypt/TestXorEncryption.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi/src/test/java/org/apache/poi/poifs/crypt/TestXorEncryption.java?rev=1907446&r1=1907445&r2=1907446&view=diff
==============================================================================
--- 
poi/trunk/poi/src/test/java/org/apache/poi/poifs/crypt/TestXorEncryption.java 
(original)
+++ 
poi/trunk/poi/src/test/java/org/apache/poi/poifs/crypt/TestXorEncryption.java 
Sun Feb  5 21:11:14 2023
@@ -32,6 +32,7 @@ import org.apache.poi.hssf.record.crypto
 import org.apache.poi.hssf.usermodel.HSSFSheet;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
 import org.apache.poi.poifs.filesystem.POIFSFileSystem;
+import org.apache.poi.util.HexDump;
 import org.apache.poi.util.HexRead;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
@@ -54,6 +55,23 @@ class TestXorEncryption {
     }
 
     @Test
+    void testXorEncryptionEmptyPassword() {
+        // Xor-Password: ""
+        // 2.5.343 XORObfuscation
+        // key = 0
+        // verifier = 0
+        int verifier = CryptoFunctions.createXorVerifier1("");
+        int key = CryptoFunctions.createXorKey1("");
+        assertEquals(0, key);
+        assertEquals(0, verifier);
+
+        byte[] xorArrAct = CryptoFunctions.createXorArray1("");
+        byte[] xorArrExp = 
HexRead.readFromString("EE-FF-FF-EA-FF-FF-E6-02-00-FA-3C-00-FE-3C-00-00");
+        assertThat("Having: " + HexDump.dump(xorArrAct, 0, 0),
+                xorArrExp, equalTo(xorArrAct));
+    }
+
+    @Test
     void testUserFile() throws IOException {
         File f = getSampleFile("xor-encryption-abc.xls");
         Biff8EncryptionKey.setCurrentUserPassword("abc");



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to