You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2015/11/20 23:38:27 UTC

svn commit: r1715438 - in /poi: site/src/documentation/content/xdocs/ trunk/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/ trunk/src/ooxml/testcases/org/apache/poi/poifs/crypt/ trunk/test-data/xmldsign/

Author: kiwiwings
Date: Fri Nov 20 22:38:27 2015
New Revision: 1715438

URL: http://svn.apache.org/viewvc?rev=1715438&view=rev
Log:
#58630 - Signing failed after deletion of first sheet

Added:
    poi/trunk/test-data/xmldsign/bug58630.xlsx   (with props)
Modified:
    poi/site/src/documentation/content/xdocs/status.xml
    poi/trunk/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/OOXMLSignatureFacet.java
    poi/trunk/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java

Modified: poi/site/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/site/src/documentation/content/xdocs/status.xml?rev=1715438&r1=1715437&r2=1715438&view=diff
==============================================================================
--- poi/site/src/documentation/content/xdocs/status.xml (original)
+++ poi/site/src/documentation/content/xdocs/status.xml Fri Nov 20 22:38:27 2015
@@ -40,6 +40,7 @@
     </devs>
 
     <release version="3.14-beta1" date="2015-11-??">
+        <action dev="PD" type="fix" fixes-bug="58630">Signing failed after deletion of first sheet</action>
         <action dev="PD" type="fix" fixes-bug="55955">Filling an existing ppt table stopped working with 3.9</action>
         <action dev="PD" type="fix" fixes-bug="54210">When saving PPT to PNG, some text is rendered backwards</action>
         <action dev="PD" type="fix" fixes-bug="53189">Shapes drawn wrongly when ppt file converted to image</action>

Modified: poi/trunk/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/OOXMLSignatureFacet.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/OOXMLSignatureFacet.java?rev=1715438&r1=1715437&r2=1715438&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/OOXMLSignatureFacet.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/poifs/crypt/dsig/facets/OOXMLSignatureFacet.java Fri Nov 20 22:38:27 2015
@@ -33,7 +33,6 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Locale;
 import java.util.Set;
-import java.util.TimeZone;
 
 import javax.xml.XMLConstants;
 import javax.xml.crypto.XMLStructure;
@@ -113,6 +112,7 @@ public class OOXMLSignatureFacet extends
         references.add(reference);
     }
 
+    @SuppressWarnings("resource")
     protected void addManifestReferences(List<Reference> manifestReferences)
     throws XMLSignatureException {
 
@@ -149,7 +149,10 @@ public class OOXMLSignatureFacet extends
                 parameterSpec.addRelationshipReference(relationship.getId());
 
                 // TODO: find a better way ...
-                String partName = baseUri + relationship.getTargetURI().toString();
+                String partName = relationship.getTargetURI().toString();
+                if (!partName.startsWith(baseUri)) {
+                    partName = baseUri + partName;
+                }
                 try {
                     partName = new URI(partName).normalize().getPath().replace('\\', '/');
                     LOG.log(POILogger.DEBUG, "part name: " + partName);

Modified: poi/trunk/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java?rev=1715438&r1=1715437&r2=1715438&view=diff
==============================================================================
--- poi/trunk/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java (original)
+++ poi/trunk/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java Fri Nov 20 22:38:27 2015
@@ -28,6 +28,8 @@ import static org.junit.Assert.assertFal
 import static org.junit.Assert.assertNotNull;
 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.FileOutputStream;
@@ -68,11 +70,13 @@ import org.apache.poi.poifs.crypt.dsig.s
 import org.apache.poi.poifs.crypt.dsig.services.RevocationDataService;
 import org.apache.poi.poifs.crypt.dsig.services.TimeStampService;
 import org.apache.poi.poifs.crypt.dsig.services.TimeStampServiceValidator;
+import org.apache.poi.ss.usermodel.WorkbookFactory;
 import org.apache.poi.util.DocumentHelper;
 import org.apache.poi.util.IOUtils;
 import org.apache.poi.util.LocaleUtil;
 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.XmlObject;
 import org.bouncycastle.asn1.x509.KeyUsage;
@@ -240,6 +244,7 @@ public class TestSignatureInfo {
     public void testManipulation() throws Exception {
         // sign & validate
         String testFile = "hello-world-unsigned.xlsx";
+        @SuppressWarnings("resource")
         OPCPackage pkg = OPCPackage.open(copy(testdata.getFile(testFile)), PackageAccess.READ_WRITE);
         sign(pkg, "Test", "CN=Test", 1);
         
@@ -379,6 +384,7 @@ public class TestSignatureInfo {
         try {
             si.confirmSignature();
         } catch (RuntimeException e) {
+            pkg.close();
             // only allow a ConnectException because of timeout, we see this in Jenkins from time to time...
             if(e.getCause() == null) {
                 throw e;
@@ -546,6 +552,32 @@ public class TestSignatureInfo {
             }
         }
     }
+
+    @Test
+    public void bug58630() throws Exception {
+        // test deletion of sheet 0 and signing
+        File tpl = copy(testdata.getFile("bug58630.xlsx"));
+        SXSSFWorkbook wb1 = new SXSSFWorkbook((XSSFWorkbook)WorkbookFactory.create(tpl), 10);
+        wb1.setCompressTempFiles(true);
+        wb1.removeSheetAt(0);
+        ByteArrayOutputStream os = new ByteArrayOutputStream();
+        wb1.write(os);
+        wb1.close();
+        OPCPackage pkg = OPCPackage.open(new ByteArrayInputStream(os.toByteArray()));
+        
+        initKeyPair("Test", "CN=Test");
+        SignatureConfig signatureConfig = new SignatureConfig();
+        signatureConfig.setKey(keyPair.getPrivate());
+        signatureConfig.setSigningCertificateChain(Collections.singletonList(x509));
+        signatureConfig.setOpcPackage(pkg);
+        
+        SignatureInfo si = new SignatureInfo();
+        si.setSignatureConfig(signatureConfig);
+        si.confirmSignature();
+        assertTrue("invalid signature", si.verifySignature());
+        
+        pkg.close();
+    }
     
     
     private void sign(OPCPackage pkgCopy, String alias, String signerDn, int signerCount) throws Exception {

Added: poi/trunk/test-data/xmldsign/bug58630.xlsx
URL: http://svn.apache.org/viewvc/poi/trunk/test-data/xmldsign/bug58630.xlsx?rev=1715438&view=auto
==============================================================================
Binary file - no diff available.

Propchange: poi/trunk/test-data/xmldsign/bug58630.xlsx
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org