fixed bug 38256: RuntimeException: Couldn't instantiate the class for type with id 0
git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@542453 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
28b2906621
commit
aeaf8fe21f
@ -219,11 +219,42 @@ public class HSLFSlideShow extends POIDocument
|
||||
// If you don't know about the type, play safe and skip over it (using
|
||||
// its length to know where the next record will start)
|
||||
//
|
||||
// For now, this work is handled by Record.findChildRecords
|
||||
|
||||
_records = Record.findChildRecords(_docstream,0,_docstream.length);
|
||||
|
||||
_records = read(_docstream, (int)currentUser.getCurrentEditOffset());
|
||||
}
|
||||
|
||||
private Record[] read(byte[] docstream, int usrOffset){
|
||||
ArrayList lst = new ArrayList();
|
||||
while (usrOffset != 0){
|
||||
UserEditAtom usr = (UserEditAtom) Record.buildRecordAtOffset(docstream, usrOffset);
|
||||
lst.add(new Integer(usrOffset));
|
||||
int psrOffset = usr.getPersistPointersOffset();
|
||||
|
||||
PersistPtrHolder ptr = (PersistPtrHolder)Record.buildRecordAtOffset(docstream, psrOffset);
|
||||
lst.add(new Integer(psrOffset));
|
||||
Hashtable entries = ptr.getSlideLocationsLookup();
|
||||
for (Iterator it = entries.keySet().iterator(); it.hasNext(); ) {
|
||||
Integer id = (Integer)it.next();
|
||||
Integer offset = (Integer)entries.get(id);
|
||||
|
||||
lst.add(offset);
|
||||
}
|
||||
|
||||
usrOffset = usr.getLastUserEditAtomOffset();
|
||||
}
|
||||
//sort found records by offset.
|
||||
//(it is not necessary but SlideShow.findMostRecentCoreRecords() expects them sorted)
|
||||
Object a[] = lst.toArray();
|
||||
Arrays.sort(a);
|
||||
Record[] rec = new Record[lst.size()];
|
||||
for (int i = 0; i < a.length; i++) {
|
||||
Integer offset = (Integer)a[i];
|
||||
rec[i] = (Record)Record.buildRecordAtOffset(docstream, offset.intValue());
|
||||
}
|
||||
|
||||
return rec;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the "Current User" stream, and load it
|
||||
*/
|
||||
|
BIN
src/scratchpad/testcases/org/apache/poi/hslf/data/38256.ppt
Normal file
BIN
src/scratchpad/testcases/org/apache/poi/hslf/data/38256.ppt
Normal file
Binary file not shown.
@ -269,4 +269,33 @@ public class TestBugs extends TestCase {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Bug 38256: RuntimeException: Couldn't instantiate the class for type with id 0.
|
||||
* ( also fixed followup: getTextRuns() returns no text )
|
||||
*/
|
||||
public void test38256 () throws Exception {
|
||||
FileInputStream is = new FileInputStream(new File(cwd, "38256.ppt"));
|
||||
SlideShow ppt = new SlideShow(is);
|
||||
is.close();
|
||||
|
||||
assertTrue("No Exceptions while reading file", true);
|
||||
|
||||
Slide[] slide = ppt.getSlides();
|
||||
assertEquals(1, slide.length);
|
||||
TextRun[] runs = slide[0].getTextRuns();
|
||||
assertEquals(4, runs.length);
|
||||
|
||||
HashSet txt = new HashSet();
|
||||
txt.add("“HAPPY BIRTHDAY SCOTT”");
|
||||
txt.add("Have a HAPPY DAY");
|
||||
txt.add("PS Nobody is allowed to hassle Scott TODAY…");
|
||||
txt.add("Drinks will be in the Boardroom at 5pm today to celebrate Scott’s B’Day… See you all there!");
|
||||
|
||||
for (int i = 0; i < runs.length; i++) {
|
||||
String text = runs[i].getRawText();
|
||||
assertTrue(txt.contains(text));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user