]> source.dussan.org Git - poi.git/commitdiff
Bug 61182 - Invalid signature created for streamed xlsx file
authorAndreas Beeker <kiwiwings@apache.org>
Tue, 25 Jul 2017 22:42:22 +0000 (22:42 +0000)
committerAndreas Beeker <kiwiwings@apache.org>
Tue, 25 Jul 2017 22:42:22 +0000 (22:42 +0000)
- add hashes for other linebreaks

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1803011 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java

index f8154a5029067e0de34b3715a03cd0553728897c..90ffd1991eeaeef9e4a1f020c4d3ee2251fb3e37 100644 (file)
@@ -27,6 +27,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assume.assumeTrue;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -81,6 +82,7 @@ import org.apache.poi.util.POILogFactory;
 import org.apache.poi.util.POILogger;
 import org.apache.poi.xssf.streaming.SXSSFWorkbook;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.apache.xmlbeans.SystemProperties;
 import org.apache.xmlbeans.XmlObject;
 import org.bouncycastle.asn1.x509.KeyUsage;
 import org.bouncycastle.cert.ocsp.OCSPResp;
@@ -178,14 +180,40 @@ public class TestSignatureInfo {
         pkg1.save(bos);
         pkg1.close();
         
+        FileOutputStream fos = new FileOutputStream("tmp/sigtest/poi.xlsx");
+        bos.writeTo(fos);
+        fos.close();
+        
         XSSFWorkbook wb2 = new XSSFWorkbook(new ByteArrayInputStream(bos.toByteArray()));
         assertEquals("Test", wb2.getSheetAt(0).getRow(1).getCell(1).getStringCellValue());
         OPCPackage pkg2 = wb2.getPackage();
         signatureConfig.setOpcPackage(pkg2);
         assertTrue(si.verifySignature());
-        String signExp =
-            "HDdvgXblLMiE6gZSoRSQUof6+aedrhK9i51we1n+4Q/ioqrQCeh5UkfQ8lD63nV4ZDbM4/pIVFi6VpMpN/HMnA"+
-            "UHeVdVUCVTgpn3Iz21Ymcd9/aerNov2BjHLhS8X3oUE+XTu2TbJLNmms0I9G4lfg6HWP9t7ZCXBXy6vyCMArc=";
+        
+        // xmlbeans adds line-breaks depending on the system setting, so we get different
+        // test results on Unix/Mac/Windows
+        // if the xml documents eventually change, this test needs to be run with the
+        // separator set to the various system configurations
+        String sep = SystemProperties.getProperty( "line.separator" );
+        String signExp;
+        assumeTrue("Hashes only known for Windows/Unix/Mac", sep == null || "\n".equals(sep) || "\r\n".equals(sep) || "\r".equals(sep));
+        if (sep == null || "\n".equals(sep)) {
+            // Unix
+            signExp =
+                "HDdvgXblLMiE6gZSoRSQUof6+aedrhK9i51we1n+4Q/ioqrQCeh5UkfQ8lD63nV4ZDbM4/pIVFi6VpMpN/HMnA"+
+                "UHeVdVUCVTgpn3Iz21Ymcd9/aerNov2BjHLhS8X3oUE+XTu2TbJLNmms0I9G4lfg6HWP9t7ZCXBXy6vyCMArc=";
+        } else if ("\r\n".equals(sep)){
+            // Windows
+            signExp =
+                "jVW6EPMywZ8jr4+I4alDosXzqrVuDG4wTdrr+la8QVbXfLm6HOh9AUFlo5yUZuWo/1gXrrkc34UTYNzuslyrOx"+
+                "KqadPOIRKUssJzdCh/hKeTxs/YtyWkpGHggrUjrF/vUUIeIXRHo+1DCAh6ptoicviH/I/Dtoa5NgkEHVuOHk8=";
+        } else {
+            // Mac
+            signExp =
+                "GSaOQp2eVRkQl2GJgWxoxFdCadJJnmmKeoQtIwGrP3zzk+BnLeytGLN3bqmwCTjvtG7DyxENS+92e2xq/MiC9b"+
+                "CtNUfXfCdM0M8fzAny/Ewn9HckIsxjBztmsryt/OZQaKu52VU0ohQu7bG+cGPzcM+qTEss+GUbD0sVAoC34HM=";
+        }
+        
         String signAct = si.getSignatureParts().iterator().next().
             getSignatureDocument().getSignature().getSignatureValue().getStringValue();
         assertEquals(signExp, signAct);