diff options
author | Andreas Beeker <kiwiwings@apache.org> | 2015-11-20 22:38:27 +0000 |
---|---|---|
committer | Andreas Beeker <kiwiwings@apache.org> | 2015-11-20 22:38:27 +0000 |
commit | 4f2692f87071bc60480e1475246acdb68da02928 (patch) | |
tree | da747a71769821b1aac7ad3b2d35dd6be3036538 /src/ooxml/testcases | |
parent | 9b9a3dbf45f004b63de48735b708693c8e9cf6cb (diff) | |
download | poi-4f2692f87071bc60480e1475246acdb68da02928.tar.gz poi-4f2692f87071bc60480e1475246acdb68da02928.zip |
#58630 - Signing failed after deletion of first sheet
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1715438 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/ooxml/testcases')
-rw-r--r-- | src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java b/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java index 6f43fdd1f1..d2fead012d 100644 --- a/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java +++ b/src/ooxml/testcases/org/apache/poi/poifs/crypt/TestSignatureInfo.java @@ -28,6 +28,8 @@ import static org.junit.Assert.assertFalse; 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.services.RevocationData; 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 {
|