Another test for NPOIFS in-place writing support - probably the deletion of an entry causes the problem
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1615273 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
0e44d8da73
commit
3cd1cd6e70
@ -69,7 +69,13 @@ public class DataSpaceMapUtils {
|
||||
LittleEndianByteArrayOutputStream bos = new LittleEndianByteArrayOutputStream(buf, 0);
|
||||
out.write(bos);
|
||||
|
||||
return dir.createDocument(parts[parts.length-1], bos.getWriteIndex(), new POIFSWriterListener(){
|
||||
String fileName = parts[parts.length-1];
|
||||
|
||||
if (dir.hasEntry(fileName)) {
|
||||
dir.getEntry(fileName).delete();
|
||||
}
|
||||
|
||||
return dir.createDocument(fileName, bos.getWriteIndex(), new POIFSWriterListener(){
|
||||
public void processPOIFSWriterEvent(POIFSWriterEvent event) {
|
||||
try {
|
||||
event.getStream().write(buf, 0, event.getLimit());
|
||||
|
@ -48,6 +48,7 @@ public class AgileEncryptionInfoBuilder implements EncryptionInfoBuilder {
|
||||
if (info.getVersionMajor() == EncryptionMode.agile.versionMajor
|
||||
&& info.getVersionMinor() == EncryptionMode.agile.versionMinor) {
|
||||
decryptor = new AgileDecryptor(this);
|
||||
encryptor = new AgileEncryptor(this);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -41,7 +41,10 @@ import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
|
||||
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
|
||||
import org.apache.poi.util.BoundedInputStream;
|
||||
import org.apache.poi.util.IOUtils;
|
||||
import org.apache.poi.util.TempFile;
|
||||
import org.apache.poi.xwpf.usermodel.XWPFDocument;
|
||||
import org.junit.Assume;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
public class TestEncryptor {
|
||||
@ -227,6 +230,38 @@ public class TestEncryptor {
|
||||
assertThat(payloadExpected, equalTo(payloadActual));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Ignore
|
||||
public void testInPlaceRewrite() throws Exception {
|
||||
File f = TempFile.createTempFile("protected_agile", ".docx");
|
||||
// File f = new File("protected_agile.docx");
|
||||
FileOutputStream fos = new FileOutputStream(f);
|
||||
InputStream fis = POIDataSamples.getPOIFSInstance().openResourceAsStream("protected_agile.docx");
|
||||
IOUtils.copy(fis, fos);
|
||||
fis.close();
|
||||
fos.close();
|
||||
|
||||
NPOIFSFileSystem fs = new NPOIFSFileSystem(f, false);
|
||||
|
||||
// decrypt the protected file - in this case it was encrypted with the default password
|
||||
EncryptionInfo encInfo = new EncryptionInfo(fs);
|
||||
Decryptor d = encInfo.getDecryptor();
|
||||
boolean b = d.verifyPassword(Decryptor.DEFAULT_PASSWORD);
|
||||
assertTrue(b);
|
||||
|
||||
// do some strange things with it ;)
|
||||
XWPFDocument docx = new XWPFDocument(d.getDataStream(fs));
|
||||
docx.getParagraphArray(0).insertNewRun(0).setText("POI was here! All your base are belong to us!");
|
||||
docx.getParagraphArray(0).insertNewRun(1).addBreak();
|
||||
|
||||
// and encrypt it again
|
||||
Encryptor e = encInfo.getEncryptor();
|
||||
e.confirmPassword("AYBABTU");
|
||||
docx.write(e.getDataStream(fs));
|
||||
|
||||
fs.close();
|
||||
}
|
||||
|
||||
|
||||
private void listEntry(DocumentNode de, String ext, String path) throws IOException {
|
||||
path += "\\" + de.getName().replace('\u0006', '_');
|
||||
|
Loading…
Reference in New Issue
Block a user