sonar fix

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1734809 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Andreas Beeker 2016-03-13 14:12:43 +00:00
parent 9bf1bf60b2
commit 045123e198
1 changed files with 34 additions and 31 deletions

View File

@ -17,63 +17,64 @@
package org.apache.poi.hslf.dev; package org.apache.poi.hslf.dev;
import java.io.ByteArrayOutputStream;
import java.io.File; import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter; import java.io.OutputStreamWriter;
import java.io.StringWriter; import java.io.StringWriter;
import java.io.Writer; import java.io.Writer;
import java.nio.charset.Charset; import java.nio.charset.Charset;
import org.apache.poi.hslf.record.RecordTypes; import org.apache.poi.hslf.record.RecordTypes;
import org.apache.poi.poifs.filesystem.DocumentEntry; import org.apache.poi.poifs.filesystem.DirectoryNode;
import org.apache.poi.poifs.filesystem.DocumentInputStream;
import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
import org.apache.poi.util.IOUtils;
import org.apache.poi.util.LittleEndian; import org.apache.poi.util.LittleEndian;
/** /**
* Utility class which dumps raw contents of a ppt file into XML format * Utility class which dumps raw contents of a ppt file into XML format
*
* @author Yegor Kozlov
*/ */
public final class PPTXMLDump { public final class PPTXMLDump {
public static final int HEADER_SIZE = 8; //size of the record header private static final int HEADER_SIZE = 8; //size of the record header
public static final int PICT_HEADER_SIZE = 25; //size of the picture header private static final int PICT_HEADER_SIZE = 25; //size of the picture header
public final static String PPDOC_ENTRY = "PowerPoint Document"; private static final String PPDOC_ENTRY = "PowerPoint Document";
public final static String PICTURES_ENTRY = "Pictures"; private static final String PICTURES_ENTRY = "Pictures";
public final static String CR = System.getProperty("line.separator"); private static final String CR = System.getProperty("line.separator");
protected Writer out; private Writer out;
protected byte[] docstream; private byte[] docstream;
protected byte[] pictstream; private byte[] pictstream;
protected boolean hexHeader = true; private boolean hexHeader = true;
public PPTXMLDump(File ppt) throws IOException { public PPTXMLDump(File ppt) throws IOException {
NPOIFSFileSystem fs = new NPOIFSFileSystem(ppt, true); NPOIFSFileSystem fs = new NPOIFSFileSystem(ppt, true);
DocumentInputStream is = null;
try { try {
//read the document entry from OLE file system docstream = readEntry(fs, PPDOC_ENTRY);
DocumentEntry entry = (DocumentEntry)fs.getRoot().getEntry(PPDOC_ENTRY); pictstream = readEntry(fs, PICTURES_ENTRY);
docstream = new byte[entry.getSize()];
is = fs.createDocumentInputStream(PPDOC_ENTRY);
is.read(docstream);
is.close();
entry = (DocumentEntry)fs.getRoot().getEntry(PICTURES_ENTRY);
pictstream = new byte[entry.getSize()];
is = fs.createDocumentInputStream(PICTURES_ENTRY);
is.read(pictstream);
} catch(FileNotFoundException e){
//silently catch errors if the presentation does not contain pictures
} finally { } finally {
if (is != null) is.close();
fs.close(); fs.close();
} }
} }
private static byte[] readEntry(NPOIFSFileSystem fs, String entry)
throws IOException {
DirectoryNode dn = fs.getRoot();
if (!dn.hasEntry(entry)) {
return null;
}
InputStream is = dn.createDocumentInputStream(entry);
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
IOUtils.copy(is, bos);
return bos.toByteArray();
} finally {
is.close();
}
}
/** /**
* Dump the structure of the supplied PPT file into XML * Dump the structure of the supplied PPT file into XML
* @param outWriter <code>Writer</code> to write out * @param outWriter <code>Writer</code> to write out
@ -111,7 +112,9 @@ public final class PPTXMLDump {
public void dump(byte[] data, int offset, int length, int padding) throws IOException { public void dump(byte[] data, int offset, int length, int padding) throws IOException {
int pos = offset; int pos = offset;
while (pos <= (offset + length - HEADER_SIZE)){ while (pos <= (offset + length - HEADER_SIZE)){
if (pos < 0) break; if (pos < 0) {
break;
}
//read record header //read record header
int info = LittleEndian.getUShort(data, pos); int info = LittleEndian.getUShort(data, pos);