You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@poi.apache.org by bu...@apache.org on 2006/12/26 11:53:39 UTC
DO NOT REPLY [Bug 41242] New: - HSSF: RecordInputStream does not read EndSubRecord
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG�
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=41242>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND�
INSERTED IN THE BUG DATABASE.
http://issues.apache.org/bugzilla/show_bug.cgi?id=41242
Summary: HSSF: RecordInputStream does not read EndSubRecord
Product: POI
Version: unspecified
Platform: Other
OS/Version: other
Status: NEW
Severity: critical
Priority: P2
Component: HSSF
AssignedTo: poi-dev@jakarta.apache.org
ReportedBy: yegor@dinom.ru
Symptoms: After serialization ObjRecord becomes 4 bytes shorter than the
original record.
As the result, certain spreadsheets, especially containing cell comments, can be
corrupted.
A quick investigation revealed that trailing EndSubRecord is never serialized.
Sub-records are read in ObjRecord.fillFields:
protected void fillFields(RecordInputStream in)
{
subrecords = new ArrayList();
byte[] subRecordData = in.readRemainder();
RecordInputStream subRecStream = new RecordInputStream(new
ByteArrayInputStream(subRecordData));
while(subRecStream.hasNextRecord()) {
subRecStream.nextRecord();
Record subRecord = SubRecord.createSubRecord(subRecStream);
subrecords.add(subRecord);
}
....
}
The condition to find next record by RecordInputStream does not work for
EndSubRecord with sid=0.
I'm not sure which is the best way to fix it. Below are my variants:
(a) change RecordInputStream to correctly process EndSubRecord.
RecordInputStream is a core class and changing it just to
handle a special case is risky.
(b) if ObjRecord ALWAYS has a trailing EndSubRecord we can manually append it
in ObjRecord.fillFields:
protected void fillFields(RecordInputStream in)
{
subrecords = new ArrayList();
byte[] subRecordData = in.readRemainder();
RecordInputStream subRecStream = new RecordInputStream(new
ByteArrayInputStream(subRecordData));
while(subRecStream.hasNextRecord()) {
subRecStream.nextRecord();
Record subRecord = SubRecord.createSubRecord(subRecStream);
subrecords.add(subRecord);
}
//EndSubRecord is a special case. Append it manually.
subrecords.add(new EndSubRecord());
....
}
I like (b). Any objections to fixing it this way?
Are there any pitfalls with sub-records?
Regards,
Yegor Kozlov
--
Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
---------------------------------------------------------------------
To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
Mailing List: http://jakarta.apache.org/site/mail2.html#poi
The Apache Jakarta POI Project: http://jakarta.apache.org/poi/
DO NOT REPLY [Bug 41242] - HSSF: RecordInputStream does not read EndSubRecord
Posted by bu...@apache.org.
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG�
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=41242>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND�
INSERTED IN THE BUG DATABASE.
http://issues.apache.org/bugzilla/show_bug.cgi?id=41242
------- Additional Comments From yegor@dinom.ru 2006-12-26 02:54 -------
Created an attachment (id=19305)
--> (http://issues.apache.org/bugzilla/attachment.cgi?id=19305&action=view)
test case
--
Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
---------------------------------------------------------------------
To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
Mailing List: http://jakarta.apache.org/site/mail2.html#poi
The Apache Jakarta POI Project: http://jakarta.apache.org/poi/
DO NOT REPLY [Bug 41242] - HSSF: RecordInputStream does not read EndSubRecord
Posted by bu...@apache.org.
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG�
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=41242>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND�
INSERTED IN THE BUG DATABASE.
http://issues.apache.org/bugzilla/show_bug.cgi?id=41242
yegor@dinom.ru changed:
What |Removed |Added
----------------------------------------------------------------------------
Attachment #19305|0 |1
is obsolete| |
------- Additional Comments From yegor@dinom.ru 2007-01-05 07:10 -------
Created an attachment (id=19367)
--> (http://issues.apache.org/bugzilla/attachment.cgi?id=19367&action=view)
archive with new and modified files
--
Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
---------------------------------------------------------------------
To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
Mailing List: http://jakarta.apache.org/site/mail2.html#poi
The Apache Jakarta POI Project: http://jakarta.apache.org/poi/
DO NOT REPLY [Bug 41242] - HSSF: RecordInputStream does not read EndSubRecord
Posted by bu...@apache.org.
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG�
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=41242>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND�
INSERTED IN THE BUG DATABASE.
http://issues.apache.org/bugzilla/show_bug.cgi?id=41242
yegor@dinom.ru changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution| |FIXED
------- Additional Comments From yegor@dinom.ru 2007-01-08 00:12 -------
Fixed.
Yegor
--
Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
---------------------------------------------------------------------
To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
Mailing List: http://jakarta.apache.org/site/mail2.html#poi
The Apache Jakarta POI Project: http://jakarta.apache.org/poi/
DO NOT REPLY [Bug 41242] - HSSF: RecordInputStream does not read EndSubRecord
Posted by bu...@apache.org.
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG�
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=41242>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND�
INSERTED IN THE BUG DATABASE.
http://issues.apache.org/bugzilla/show_bug.cgi?id=41242
yegor@dinom.ru changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |mth-asf@decisionsoft.co.uk
------- Additional Comments From yegor@dinom.ru 2007-01-12 06:46 -------
*** Bug 38607 has been marked as a duplicate of this bug. ***
--
Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
---------------------------------------------------------------------
To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
Mailing List: http://jakarta.apache.org/site/mail2.html#poi
The Apache Jakarta POI Project: http://jakarta.apache.org/poi/
DO NOT REPLY [Bug 41242] - HSSF: RecordInputStream does not read EndSubRecord
Posted by bu...@apache.org.
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG�
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=41242>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND�
INSERTED IN THE BUG DATABASE.
http://issues.apache.org/bugzilla/show_bug.cgi?id=41242
------- Additional Comments From yegor@dinom.ru 2007-01-05 07:17 -------
The problem fixed.
I decided not to change RecordInputStream. There is a simpler solution in
ObjRecord.fillFields:
Count the number of bytes read, if there are 4 unread bytes it means
EndSubRecord has been skipped and needs to be appended explicitly.
P.S. Unit tests for ObjRecord were missing. It's time to add it.
Yegor
--
Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
---------------------------------------------------------------------
To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
Mailing List: http://jakarta.apache.org/site/mail2.html#poi
The Apache Jakarta POI Project: http://jakarta.apache.org/poi/
DO NOT REPLY [Bug 41242] - HSSF: RecordInputStream does not read EndSubRecord
Posted by bu...@apache.org.
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG�
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=41242>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND�
INSERTED IN THE BUG DATABASE.
http://issues.apache.org/bugzilla/show_bug.cgi?id=41242
------- Additional Comments From yegor@dinom.ru 2007-01-05 07:09 -------
Created an attachment (id=19366)
--> (http://issues.apache.org/bugzilla/attachment.cgi?id=19366&action=view)
the patch
--
Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
---------------------------------------------------------------------
To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
Mailing List: http://jakarta.apache.org/site/mail2.html#poi
The Apache Jakarta POI Project: http://jakarta.apache.org/poi/