Bug 58326 - Forbidden APIs patches - second set of changes for charset settings

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1701713 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Andreas Beeker 2015-09-08 00:04:12 +00:00
parent 91e6a64627
commit 50107cae16
17 changed files with 176 additions and 201 deletions

View File

@ -82,6 +82,7 @@ import org.apache.poi.hssf.record.WriteAccessRecord;
import org.apache.poi.hssf.record.WriteProtectRecord; import org.apache.poi.hssf.record.WriteProtectRecord;
import org.apache.poi.hssf.record.common.UnicodeString; import org.apache.poi.hssf.record.common.UnicodeString;
import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.poifs.crypt.CryptoFunctions;
import org.apache.poi.ss.formula.EvaluationWorkbook.ExternalName; import org.apache.poi.ss.formula.EvaluationWorkbook.ExternalName;
import org.apache.poi.ss.formula.EvaluationWorkbook.ExternalSheet; import org.apache.poi.ss.formula.EvaluationWorkbook.ExternalSheet;
import org.apache.poi.ss.formula.EvaluationWorkbook.ExternalSheetRange; import org.apache.poi.ss.formula.EvaluationWorkbook.ExternalSheetRange;
@ -2375,7 +2376,7 @@ public final class InternalWorkbook {
WriteAccessRecord waccess = getWriteAccess(); WriteAccessRecord waccess = getWriteAccess();
/* WriteProtectRecord wprotect =*/ getWriteProtect(); /* WriteProtectRecord wprotect =*/ getWriteProtect();
frec.setReadOnly((short)1); frec.setReadOnly((short)1);
frec.setPassword(FileSharingRecord.hashPassword(password)); frec.setPassword((short)CryptoFunctions.createXorVerifier1(password));
frec.setUsername(username); frec.setUsername(username);
waccess.setUsername(username); waccess.setUsername(username);
} }

View File

@ -52,25 +52,6 @@ public final class FileSharingRecord extends StandardRecord {
} }
} }
//this is the world's lamest "security". thanks to Wouter van Vugt for making me
//not have to try real hard. -ACO
public static short hashPassword(String password) {
byte[] passwordCharacters = password.getBytes();
int hash = 0;
if (passwordCharacters.length > 0) {
int charIndex = passwordCharacters.length;
while (charIndex-- > 0) {
hash = ((hash >> 14) & 0x01) | ((hash << 1) & 0x7fff);
hash ^= passwordCharacters[charIndex];
}
// also hash with charcount
hash = ((hash >> 14) & 0x01) | ((hash << 1) & 0x7fff);
hash ^= passwordCharacters.length;
hash ^= (0x8000 | ('N' << 8) | 'K');
}
return (short)hash;
}
/** /**
* set the readonly flag * set the readonly flag
* *

View File

@ -1819,21 +1819,20 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
* Aggregates the drawing records and dumps the escher record hierarchy * Aggregates the drawing records and dumps the escher record hierarchy
* to the standard output. * to the standard output.
*/ */
public void dumpDrawingRecords(boolean fat) { public void dumpDrawingRecords(boolean fat, PrintWriter pw) {
_sheet.aggregateDrawingRecords(_book.getDrawingManager(), false); _sheet.aggregateDrawingRecords(_book.getDrawingManager(), false);
EscherAggregate r = (EscherAggregate) getSheet().findFirstRecordBySid(EscherAggregate.sid); EscherAggregate r = (EscherAggregate) getSheet().findFirstRecordBySid(EscherAggregate.sid);
List<EscherRecord> escherRecords = r.getEscherRecords(); List<EscherRecord> escherRecords = r.getEscherRecords();
PrintWriter w = new PrintWriter(System.out);
for (Iterator<EscherRecord> iterator = escherRecords.iterator(); iterator.hasNext(); ) { for (Iterator<EscherRecord> iterator = escherRecords.iterator(); iterator.hasNext(); ) {
EscherRecord escherRecord = iterator.next(); EscherRecord escherRecord = iterator.next();
if (fat) { if (fat) {
System.out.println(escherRecord.toString()); pw.println(escherRecord.toString());
} else { } else {
escherRecord.display(w, 0); escherRecord.display(pw, 0);
} }
} }
w.flush(); pw.flush();
} }
/** /**
@ -2053,6 +2052,7 @@ public final class HSSFSheet implements org.apache.poi.ss.usermodel.Sheet {
* *
* @return the name of this sheet * @return the name of this sheet
*/ */
@SuppressWarnings("resource")
public String getSheetName() { public String getSheetName() {
HSSFWorkbook wb = getWorkbook(); HSSFWorkbook wb = getWorkbook();
int idx = wb.getSheetIndex(this); int idx = wb.getSheetIndex(this);

View File

@ -20,6 +20,9 @@ package org.apache.poi.util;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.nio.charset.Charset;
import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFWorkbook;
@ -30,23 +33,24 @@ import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
*/ */
public class DrawingDump public class DrawingDump
{ {
public static void main( String[] args ) throws IOException public static void main( String[] args ) throws IOException {
{ OutputStreamWriter osw = new OutputStreamWriter(System.out, Charset.defaultCharset());
NPOIFSFileSystem fs = PrintWriter pw = new PrintWriter(osw);
new NPOIFSFileSystem(new File(args[0])); NPOIFSFileSystem fs = new NPOIFSFileSystem(new File(args[0]));
HSSFWorkbook wb = new HSSFWorkbook(fs); HSSFWorkbook wb = new HSSFWorkbook(fs);
try { try {
System.out.println( "Drawing group:" ); pw.println( "Drawing group:" );
wb.dumpDrawingGroupRecords(true); wb.dumpDrawingGroupRecords(true);
for (int sheetNum = 1; sheetNum <= wb.getNumberOfSheets(); sheetNum++) for (int sheetNum = 1; sheetNum <= wb.getNumberOfSheets(); sheetNum++)
{ {
System.out.println( "Sheet " + sheetNum + ":" ); pw.println( "Sheet " + sheetNum + ":" );
HSSFSheet sheet = wb.getSheetAt(sheetNum - 1); HSSFSheet sheet = wb.getSheetAt(sheetNum - 1);
sheet.dumpDrawingRecords(true); sheet.dumpDrawingRecords(true, pw);
} }
} finally { } finally {
wb.close(); wb.close();
fs.close();
} }
} }
} }

View File

@ -47,6 +47,7 @@ import javax.xml.bind.DatatypeConverter;
import org.apache.poi.poifs.crypt.CryptoFunctions; import org.apache.poi.poifs.crypt.CryptoFunctions;
import org.apache.poi.poifs.crypt.HashAlgorithm; import org.apache.poi.poifs.crypt.HashAlgorithm;
import org.apache.poi.poifs.crypt.dsig.SignatureConfig; import org.apache.poi.poifs.crypt.dsig.SignatureConfig;
import org.apache.poi.util.HexDump;
import org.apache.poi.util.IOUtils; import org.apache.poi.util.IOUtils;
import org.apache.poi.util.POILogFactory; import org.apache.poi.util.POILogFactory;
import org.apache.poi.util.POILogger; import org.apache.poi.util.POILogger;
@ -160,7 +161,7 @@ public class TSPTimeStampService implements TimeStampService {
ByteArrayOutputStream bos = new ByteArrayOutputStream(); ByteArrayOutputStream bos = new ByteArrayOutputStream();
IOUtils.copy(huc.getInputStream(), bos); IOUtils.copy(huc.getInputStream(), bos);
LOG.log(POILogger.DEBUG, "response content: ", bos.toString()); LOG.log(POILogger.DEBUG, "response content: ", HexDump.dump(bos.toByteArray(), 0, 0));
if (!contentType.startsWith(signatureConfig.isTspOldProtocol() if (!contentType.startsWith(signatureConfig.isTspOldProtocol()
? "application/timestamp-response" ? "application/timestamp-response"

View File

@ -40,6 +40,8 @@ public class TestEncryptionInfo {
assertEquals(32, info.getVerifier().getEncryptedVerifierHash().length); assertEquals(32, info.getVerifier().getEncryptedVerifierHash().length);
assertEquals(CipherProvider.aes, info.getHeader().getCipherProvider()); assertEquals(CipherProvider.aes, info.getHeader().getCipherProvider());
assertEquals("Microsoft Enhanced RSA and AES Cryptographic Provider", info.getHeader().getCspName()); assertEquals("Microsoft Enhanced RSA and AES Cryptographic Provider", info.getHeader().getCspName());
fs.close();
} }
@Test @Test
@ -57,5 +59,7 @@ public class TestEncryptionInfo {
assertEquals(64, info.getVerifier().getEncryptedVerifierHash().length); assertEquals(64, info.getVerifier().getEncryptedVerifierHash().length);
assertEquals(CipherProvider.aes, info.getHeader().getCipherProvider()); assertEquals(CipherProvider.aes, info.getHeader().getCipherProvider());
// assertEquals("Microsoft Enhanced RSA and AES Cryptographic Provider", info.getHeader().getCspName()); // assertEquals("Microsoft Enhanced RSA and AES Cryptographic Provider", info.getHeader().getCspName());
fs.close();
} }
} }

View File

@ -17,7 +17,7 @@
package org.apache.poi.hdgf; package org.apache.poi.hdgf;
import java.io.FileInputStream; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
@ -34,6 +34,7 @@ import org.apache.poi.poifs.filesystem.DocumentEntry;
import org.apache.poi.poifs.filesystem.NPOIFSFileSystem; import org.apache.poi.poifs.filesystem.NPOIFSFileSystem;
import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.util.LittleEndian; import org.apache.poi.util.LittleEndian;
import org.apache.poi.util.LocaleUtil;
/** /**
* See * See
@ -80,7 +81,7 @@ public final class HDGFDiagram extends POIDocument {
dir.createDocumentInputStream("VisioDocument").read(_docstream); dir.createDocumentInputStream("VisioDocument").read(_docstream);
// Check it's really visio // Check it's really visio
String typeString = new String(_docstream, 0, 20); String typeString = new String(_docstream, 0, 20, LocaleUtil.CHARSET_1252 );
if(! typeString.equals(VISIO_HEADER)) { if(! typeString.equals(VISIO_HEADER)) {
throw new IllegalArgumentException("Wasn't a valid visio document, started with " + typeString); throw new IllegalArgumentException("Wasn't a valid visio document, started with " + typeString);
} }
@ -171,7 +172,9 @@ public final class HDGFDiagram extends POIDocument {
* For testing only * For testing only
*/ */
public static void main(String args[]) throws Exception { public static void main(String args[]) throws Exception {
HDGFDiagram hdgf = new HDGFDiagram(new POIFSFileSystem(new FileInputStream(args[0]))); NPOIFSFileSystem pfs = new NPOIFSFileSystem(new File(args[0]));
HDGFDiagram hdgf = new HDGFDiagram(pfs);
hdgf.debug(); hdgf.debug();
pfs.close();
} }
} }

View File

@ -25,6 +25,7 @@ import java.util.ArrayList;
import java.util.Hashtable; import java.util.Hashtable;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import org.apache.poi.util.LocaleUtil;
import org.apache.poi.util.POILogFactory; import org.apache.poi.util.POILogFactory;
import org.apache.poi.util.POILogger; import org.apache.poi.util.POILogger;
@ -65,12 +66,16 @@ public final class ChunkFactory {
*/ */
private void processChunkParseCommands() throws IOException { private void processChunkParseCommands() throws IOException {
String line; String line;
InputStream cpd = ChunkFactory.class.getResourceAsStream(chunkTableName); InputStream cpd = null;
BufferedReader inp = null;
try {
cpd = ChunkFactory.class.getResourceAsStream(chunkTableName);
if(cpd == null) { if(cpd == null) {
throw new IllegalStateException("Unable to find HDGF chunk definition on the classpath - " + chunkTableName); throw new IllegalStateException("Unable to find HDGF chunk definition on the classpath - " + chunkTableName);
} }
BufferedReader inp = new BufferedReader(new InputStreamReader(cpd)); inp = new BufferedReader(new InputStreamReader(cpd, LocaleUtil.CHARSET_1252));
while( (line = inp.readLine()) != null ) { while( (line = inp.readLine()) != null ) {
if(line.startsWith("#")) continue; if(line.startsWith("#")) continue;
if(line.startsWith(" ")) continue; if(line.startsWith(" ")) continue;
@ -100,8 +105,10 @@ public final class ChunkFactory {
// Add to the hashtable // Add to the hashtable
chunkCommandDefinitions.put(Integer.valueOf(chunkType), defs); chunkCommandDefinitions.put(Integer.valueOf(chunkType), defs);
} }
inp.close(); } finally {
cpd.close(); if (inp != null) inp.close();
if (cpd != null) cpd.close();
}
} }
public int getVersion() { return version; } public int getVersion() { return version; }

View File

@ -25,6 +25,7 @@ import org.apache.poi.hpbf.model.qcbits.QCTextBit;
import org.apache.poi.hpbf.model.qcbits.UnknownQCBit; import org.apache.poi.hpbf.model.qcbits.UnknownQCBit;
import org.apache.poi.poifs.filesystem.DirectoryNode; import org.apache.poi.poifs.filesystem.DirectoryNode;
import org.apache.poi.util.LittleEndian; import org.apache.poi.util.LittleEndian;
import org.apache.poi.util.LocaleUtil;
/** /**
* Quill -> QuillSub -> CONTENTS * Quill -> QuillSub -> CONTENTS
@ -40,7 +41,7 @@ public final class QuillContents extends HPBFPart {
// all our bits // all our bits
// Check first 8 bytes // Check first 8 bytes
String f8 = new String(data, 0, 8); String f8 = new String(data, 0, 8, LocaleUtil.CHARSET_1252);
if(! f8.equals("CHNKINK ")) { if(! f8.equals("CHNKINK ")) {
throw new IllegalArgumentException("Expecting 'CHNKINK ' but was '"+f8+"'"); throw new IllegalArgumentException("Expecting 'CHNKINK ' but was '"+f8+"'");
} }
@ -52,11 +53,11 @@ public final class QuillContents extends HPBFPart {
int offset = 0x20 + i*24; int offset = 0x20 + i*24;
if(data[offset] == 0x18 && data[offset+1] == 0x00) { if(data[offset] == 0x18 && data[offset+1] == 0x00) {
// Has some data // Has some data
String thingType = new String(data, offset+2, 4); String thingType = new String(data, offset+2, 4, LocaleUtil.CHARSET_1252);
int optA = LittleEndian.getUShort(data, offset+6); int optA = LittleEndian.getUShort(data, offset+6);
int optB = LittleEndian.getUShort(data, offset+8); int optB = LittleEndian.getUShort(data, offset+8);
int optC = LittleEndian.getUShort(data, offset+10); int optC = LittleEndian.getUShort(data, offset+10);
String bitType = new String(data, offset+12, 4); String bitType = new String(data, offset+12, 4, LocaleUtil.CHARSET_1252);
int from = (int)LittleEndian.getUInt(data, offset+16); int from = (int)LittleEndian.getUInt(data, offset+16);
int len = (int)LittleEndian.getUInt(data, offset+20); int len = (int)LittleEndian.getUInt(data, offset+20);

View File

@ -19,10 +19,12 @@ package org.apache.poi.hslf.dev;
import java.io.File; import java.io.File;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.io.FileWriter; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
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 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.DocumentEntry;
@ -49,21 +51,26 @@ public final class PPTXMLDump {
protected boolean hexHeader = true; protected boolean hexHeader = true;
public PPTXMLDump(File ppt) throws IOException { public PPTXMLDump(File ppt) throws IOException {
NPOIFSFileSystem fs = new NPOIFSFileSystem(ppt); NPOIFSFileSystem fs = new NPOIFSFileSystem(ppt, true);
DocumentInputStream is = null;
try {
//read the document entry from OLE file system //read the document entry from OLE file system
DocumentEntry entry = (DocumentEntry)fs.getRoot().getEntry(PPDOC_ENTRY); DocumentEntry entry = (DocumentEntry)fs.getRoot().getEntry(PPDOC_ENTRY);
docstream = new byte[entry.getSize()]; docstream = new byte[entry.getSize()];
DocumentInputStream is = fs.createDocumentInputStream(PPDOC_ENTRY); is = fs.createDocumentInputStream(PPDOC_ENTRY);
is.read(docstream); is.read(docstream);
is.close();
try {
entry = (DocumentEntry)fs.getRoot().getEntry(PICTURES_ENTRY); entry = (DocumentEntry)fs.getRoot().getEntry(PICTURES_ENTRY);
pictstream = new byte[entry.getSize()]; pictstream = new byte[entry.getSize()];
is = fs.createDocumentInputStream(PICTURES_ENTRY); is = fs.createDocumentInputStream(PICTURES_ENTRY);
is.read(pictstream); is.read(pictstream);
} catch(FileNotFoundException e){ } catch(FileNotFoundException e){
//silently catch errors if the presentation does not contain pictures //silently catch errors if the presentation does not contain pictures
} finally {
if (is != null) is.close();
fs.close();
} }
} }
@ -72,8 +79,8 @@ public final class PPTXMLDump {
* @param out <code>Writer</code> to write out * @param out <code>Writer</code> to write out
* @throws java.io.IOException * @throws java.io.IOException
*/ */
public void dump(Writer out) throws IOException { public void dump(Writer outWriter) throws IOException {
this.out = out; this.out = outWriter;
int padding = 0; int padding = 0;
write(out, "<Presentation>" + CR, padding); write(out, "<Presentation>" + CR, padding);
@ -197,7 +204,8 @@ public final class PPTXMLDump {
System.out.println("Dumping " + args[i]); System.out.println("Dumping " + args[i]);
if (outFile){ if (outFile){
FileWriter out = new FileWriter(ppt.getName() + ".xml"); FileOutputStream fos = new FileOutputStream(ppt.getName() + ".xml");
OutputStreamWriter out = new OutputStreamWriter(fos, Charset.forName("UTF8"));
dump.dump(out); dump.dump(out);
out.close(); out.close();
} else { } else {

View File

@ -1244,7 +1244,7 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
wrapper.appendChildRecord(tha); wrapper.appendChildRecord(tha);
TextBytesAtom tba = new TextBytesAtom(); TextBytesAtom tba = new TextBytesAtom();
tba.setText("".getBytes()); tba.setText("".getBytes(LocaleUtil.CHARSET_1252));
wrapper.appendChildRecord(tba); wrapper.appendChildRecord(tba);
StyleTextPropAtom sta = new StyleTextPropAtom(1); StyleTextPropAtom sta = new StyleTextPropAtom(1);

View File

@ -17,7 +17,6 @@
package org.apache.poi.hssf.converter; package org.apache.poi.hssf.converter;
import java.io.File; import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -77,24 +76,19 @@ public class ExcelToFoConverter extends AbstractExcelConverter
* Where infile is an input .xls file ( Word 97-2007) which will be rendered * Where infile is an input .xls file ( Word 97-2007) which will be rendered
* as XSL FO into outfile * as XSL FO into outfile
*/ */
public static void main( String[] args ) public static void main( String[] args ) throws Exception {
{ if ( args.length < 2 ) {
if ( args.length < 2 ) System.err.println( "Usage: ExcelToFoConverter <inputFile.xls> <saveTo.xml>" );
{
System.err
.println( "Usage: ExcelToFoConverter <inputFile.xls> <saveTo.xml>" );
return; return;
} }
System.out.println( "Converting " + args[0] ); System.out.println( "Converting " + args[0] );
System.out.println( "Saving output to " + args[1] ); System.out.println( "Saving output to " + args[1] );
try
{
Document doc = ExcelToHtmlConverter.process( new File( args[0] ) ); Document doc = ExcelToHtmlConverter.process( new File( args[0] ) );
FileWriter out = new FileWriter( args[1] );
DOMSource domSource = new DOMSource( doc ); DOMSource domSource = new DOMSource( doc );
StreamResult streamResult = new StreamResult( out ); StreamResult streamResult = new StreamResult( new File(args[1]) );
TransformerFactory tf = TransformerFactory.newInstance(); TransformerFactory tf = TransformerFactory.newInstance();
Transformer serializer = tf.newTransformer(); Transformer serializer = tf.newTransformer();
@ -103,12 +97,6 @@ public class ExcelToFoConverter extends AbstractExcelConverter
serializer.setOutputProperty( OutputKeys.INDENT, "no" ); serializer.setOutputProperty( OutputKeys.INDENT, "no" );
serializer.setOutputProperty( OutputKeys.METHOD, "xml" ); serializer.setOutputProperty( OutputKeys.METHOD, "xml" );
serializer.transform( domSource, streamResult ); serializer.transform( domSource, streamResult );
out.close();
}
catch ( Exception e )
{
e.printStackTrace();
}
} }
/** /**
@ -125,7 +113,9 @@ public class ExcelToFoConverter extends AbstractExcelConverter
XMLHelper.getDocumentBuilderFactory().newDocumentBuilder() XMLHelper.getDocumentBuilderFactory().newDocumentBuilder()
.newDocument() ); .newDocument() );
excelToHtmlConverter.processWorkbook( workbook ); excelToHtmlConverter.processWorkbook( workbook );
return excelToHtmlConverter.getDocument(); Document doc = excelToHtmlConverter.getDocument();
workbook.close();
return doc;
} }
private final FoDocumentFacade foDocumentFacade; private final FoDocumentFacade foDocumentFacade;

View File

@ -495,8 +495,7 @@ public abstract class AbstractWordConverter
} }
String text = characterRun.text(); String text = characterRun.text();
if ( text.getBytes().length == 0 ) if ( text.isEmpty() ) continue;
continue;
if ( characterRun.isSpecialCharacter() ) if ( characterRun.isSpecialCharacter() )
{ {
@ -530,7 +529,7 @@ public abstract class AbstractWordConverter
} }
} }
if ( text.getBytes()[0] == FIELD_BEGIN_MARK ) if ( text.charAt(0) == FIELD_BEGIN_MARK )
{ {
if ( wordDocument instanceof HWPFDocument ) if ( wordDocument instanceof HWPFDocument )
{ {
@ -566,12 +565,12 @@ public abstract class AbstractWordConverter
continue; continue;
} }
if ( text.getBytes()[0] == FIELD_SEPARATOR_MARK ) if ( text.charAt(0) == FIELD_SEPARATOR_MARK )
{ {
// shall not appear without FIELD_BEGIN_MARK // shall not appear without FIELD_BEGIN_MARK
continue; continue;
} }
if ( text.getBytes()[0] == FIELD_END_MARK ) if ( text.charAt(0) == FIELD_END_MARK )
{ {
// shall not appear without FIELD_BEGIN_MARK // shall not appear without FIELD_BEGIN_MARK
continue; continue;
@ -1168,10 +1167,9 @@ public abstract class AbstractWordConverter
CharacterRun characterRun = range.getCharacterRun( c ); CharacterRun characterRun = range.getCharacterRun( c );
String text = characterRun.text(); String text = characterRun.text();
if ( text.getBytes().length == 0 ) if ( text.isEmpty() ) continue;
continue;
final byte firstByte = text.getBytes()[0]; final char firstByte = text.charAt(0);
if ( firstByte == FIELD_BEGIN_MARK ) if ( firstByte == FIELD_BEGIN_MARK )
{ {
int[] nested = tryDeadField_lookupFieldSeparatorEnd( int[] nested = tryDeadField_lookupFieldSeparatorEnd(
@ -1195,7 +1193,7 @@ public abstract class AbstractWordConverter
continue; continue;
} }
if ( text.getBytes()[0] == FIELD_END_MARK ) if ( firstByte == FIELD_END_MARK )
{ {
if ( endMark != -1 ) if ( endMark != -1 )
{ {

View File

@ -17,7 +17,6 @@
package org.apache.poi.hwpf.converter; package org.apache.poi.hwpf.converter;
import java.io.File; import java.io.File;
import java.io.FileWriter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
@ -73,36 +72,25 @@ public class WordToFoConverter extends AbstractWordConverter
* Where infile is an input .doc file ( Word 97-2007) which will be rendered * Where infile is an input .doc file ( Word 97-2007) which will be rendered
* as XSL-FO into outfile * as XSL-FO into outfile
*/ */
public static void main( String[] args ) public static void main( String[] args ) throws Exception {
{
if ( args.length < 2 ) if ( args.length < 2 )
{ {
System.err System.err.println( "Usage: WordToFoConverter <inputFile.doc> <saveTo.fo>" );
.println( "Usage: WordToFoConverter <inputFile.doc> <saveTo.fo>" );
return; return;
} }
System.out.println( "Converting " + args[0] ); System.out.println( "Converting " + args[0] );
System.out.println( "Saving output to " + args[1] ); System.out.println( "Saving output to " + args[1] );
try
{
Document doc = WordToFoConverter.process( new File( args[0] ) ); Document doc = WordToFoConverter.process( new File( args[0] ) );
FileWriter out = new FileWriter( args[1] );
DOMSource domSource = new DOMSource( doc ); DOMSource domSource = new DOMSource( doc );
StreamResult streamResult = new StreamResult( out ); StreamResult streamResult = new StreamResult( new File( args[1] ) );
TransformerFactory tf = TransformerFactory.newInstance(); TransformerFactory tf = TransformerFactory.newInstance();
Transformer serializer = tf.newTransformer(); Transformer serializer = tf.newTransformer();
// TODO set encoding from a command argument // TODO set encoding from a command argument
serializer.setOutputProperty( OutputKeys.ENCODING, "UTF-8" ); serializer.setOutputProperty( OutputKeys.ENCODING, "UTF-8" );
serializer.setOutputProperty( OutputKeys.INDENT, "yes" ); serializer.setOutputProperty( OutputKeys.INDENT, "yes" );
serializer.transform( domSource, streamResult ); serializer.transform( domSource, streamResult );
out.close();
}
catch ( Exception e )
{
e.printStackTrace();
}
} }
static Document process( File docFile ) throws Exception static Document process( File docFile ) throws Exception

View File

@ -19,7 +19,6 @@ package org.apache.poi.hwpf.converter;
import static org.apache.poi.hwpf.converter.AbstractWordUtils.TWIPS_PER_INCH; import static org.apache.poi.hwpf.converter.AbstractWordUtils.TWIPS_PER_INCH;
import java.io.File; import java.io.File;
import java.io.FileWriter;
import java.util.List; import java.util.List;
import java.util.Stack; import java.util.Stack;
@ -119,7 +118,7 @@ public class WordToHtmlConverter extends AbstractWordConverter
* Where infile is an input .doc file ( Word 95-2007) which will be rendered * Where infile is an input .doc file ( Word 95-2007) which will be rendered
* as HTML into outfile * as HTML into outfile
*/ */
public static void main( String[] args ) public static void main( String[] args ) throws Exception
{ {
if ( args.length < 2 ) if ( args.length < 2 )
{ {
@ -130,13 +129,11 @@ public class WordToHtmlConverter extends AbstractWordConverter
System.out.println( "Converting " + args[0] ); System.out.println( "Converting " + args[0] );
System.out.println( "Saving output to " + args[1] ); System.out.println( "Saving output to " + args[1] );
try
{
Document doc = WordToHtmlConverter.process( new File( args[0] ) ); Document doc = WordToHtmlConverter.process( new File( args[0] ) );
FileWriter out = new FileWriter( args[1] );
DOMSource domSource = new DOMSource( doc ); DOMSource domSource = new DOMSource( doc );
StreamResult streamResult = new StreamResult( out ); StreamResult streamResult = new StreamResult( new File(args[1]) );
TransformerFactory tf = TransformerFactory.newInstance(); TransformerFactory tf = TransformerFactory.newInstance();
Transformer serializer = tf.newTransformer(); Transformer serializer = tf.newTransformer();
@ -145,12 +142,6 @@ public class WordToHtmlConverter extends AbstractWordConverter
serializer.setOutputProperty( OutputKeys.INDENT, "yes" ); serializer.setOutputProperty( OutputKeys.INDENT, "yes" );
serializer.setOutputProperty( OutputKeys.METHOD, "html" ); serializer.setOutputProperty( OutputKeys.METHOD, "html" );
serializer.transform( domSource, streamResult ); serializer.transform( domSource, streamResult );
out.close();
}
catch ( Exception e )
{
e.printStackTrace();
}
} }
static Document process( File docFile ) throws Exception static Document process( File docFile ) throws Exception

View File

@ -17,7 +17,6 @@
package org.apache.poi.hwpf.converter; package org.apache.poi.hwpf.converter;
import java.io.File; import java.io.File;
import java.io.FileWriter;
import java.io.StringWriter; import java.io.StringWriter;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.List; import java.util.List;
@ -91,24 +90,20 @@ public class WordToTextConverter extends AbstractWordConverter
* Where infile is an input .doc file ( Word 95-2007) which will be rendered * Where infile is an input .doc file ( Word 95-2007) which will be rendered
* as plain text into outfile * as plain text into outfile
*/ */
public static void main( String[] args ) public static void main( String[] args ) throws Exception {
{
if ( args.length < 2 ) if ( args.length < 2 )
{ {
System.err System.err.println( "Usage: WordToTextConverter <inputFile.doc> <saveTo.txt>" );
.println( "Usage: WordToTextConverter <inputFile.doc> <saveTo.txt>" );
return; return;
} }
System.out.println( "Converting " + args[0] ); System.out.println( "Converting " + args[0] );
System.out.println( "Saving output to " + args[1] ); System.out.println( "Saving output to " + args[1] );
try
{
Document doc = WordToTextConverter.process( new File( args[0] ) ); Document doc = WordToTextConverter.process( new File( args[0] ) );
FileWriter out = new FileWriter( args[1] );
DOMSource domSource = new DOMSource( doc ); DOMSource domSource = new DOMSource( doc );
StreamResult streamResult = new StreamResult( out ); StreamResult streamResult = new StreamResult( new File( args[1] ) );
TransformerFactory tf = TransformerFactory.newInstance(); TransformerFactory tf = TransformerFactory.newInstance();
Transformer serializer = tf.newTransformer(); Transformer serializer = tf.newTransformer();
@ -117,12 +112,6 @@ public class WordToTextConverter extends AbstractWordConverter
serializer.setOutputProperty( OutputKeys.INDENT, "no" ); serializer.setOutputProperty( OutputKeys.INDENT, "no" );
serializer.setOutputProperty( OutputKeys.METHOD, "text" ); serializer.setOutputProperty( OutputKeys.METHOD, "text" );
serializer.transform( domSource, streamResult ); serializer.transform( domSource, streamResult );
out.close();
}
catch ( Exception e )
{
e.printStackTrace();
}
} }
static Document process( File docFile ) throws Exception static Document process( File docFile ) throws Exception

View File

@ -17,9 +17,14 @@
package org.apache.poi.hdgf.chunks; package org.apache.poi.hdgf.chunks;
import junit.framework.TestCase; import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
public final class TestChunks extends TestCase { import org.junit.Test;
public final class TestChunks {
public static final byte[] data_a = new byte[] { 70, 0, 0, 0, public static final byte[] data_a = new byte[] { 70, 0, 0, 0,
-1, -1, -1, -1, 2, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, -1, -1, -1, -1, 2, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0,
0, 0, 2, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 2, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
@ -83,8 +88,8 @@ public static final byte[] data_b = new byte[] { 70, 0, 0, 0,
0, 0, 0 0, 0, 0
}; };
@Test
public void testChunkHeaderA() throws Exception { public void testChunkHeaderA() throws Exception {
ChunkFactory cf = new ChunkFactory(11);
ChunkHeader h = ChunkHeader h =
ChunkHeader.createChunkHeader(11, data_a, 0); ChunkHeader.createChunkHeader(11, data_a, 0);
@ -101,8 +106,9 @@ public static final byte[] data_b = new byte[] { 70, 0, 0, 0,
assertTrue(header.hasTrailer()); assertTrue(header.hasTrailer());
assertTrue(header.hasSeparator()); assertTrue(header.hasSeparator());
} }
@Test
public void testChunkHeaderB() throws Exception { public void testChunkHeaderB() throws Exception {
ChunkFactory cf = new ChunkFactory(11);
ChunkHeader h = ChunkHeader h =
ChunkHeader.createChunkHeader(11, data_b, 0); ChunkHeader.createChunkHeader(11, data_b, 0);
@ -120,6 +126,7 @@ public static final byte[] data_b = new byte[] { 70, 0, 0, 0,
assertTrue(header.hasSeparator()); assertTrue(header.hasSeparator());
} }
@Test
public void testOneChunk() throws Exception { public void testOneChunk() throws Exception {
ChunkFactory cf = new ChunkFactory(11); ChunkFactory cf = new ChunkFactory(11);
cf.createChunk(data_a, 0); cf.createChunk(data_a, 0);
@ -152,6 +159,7 @@ public static final byte[] data_b = new byte[] { 70, 0, 0, 0,
assertEquals("0", chunk.commandDefinitions[1].getName()); assertEquals("0", chunk.commandDefinitions[1].getName());
} }
@Test
public void testAnotherChunk() throws Exception { public void testAnotherChunk() throws Exception {
ChunkFactory cf = new ChunkFactory(11); ChunkFactory cf = new ChunkFactory(11);
@ -187,6 +195,7 @@ public static final byte[] data_b = new byte[] { 70, 0, 0, 0,
assertEquals("0", chunk.commandDefinitions[1].getName()); assertEquals("0", chunk.commandDefinitions[1].getName());
} }
@Test
public void testManyChunks() throws Exception { public void testManyChunks() throws Exception {
ChunkFactory cf = new ChunkFactory(11); ChunkFactory cf = new ChunkFactory(11);
Chunk chunk; Chunk chunk;