Bug 46368 - HSSFRichTextString.length() returns negative value if length > max
Summary: HSSFRichTextString.length() returns negative value if length > max
Alias: None
Product: POI
Classification: Unclassified
Component: HSSF (show other bugs)
Version: 3.2-FINAL
Hardware: PC Windows XP
: P4 minor (vote)
Target Milestone: ---
Assignee: POI Developers List
Depends on:
Reported: 2008-12-09 08:53 UTC by Terry Paul
Modified: 2008-12-09 11:37 UTC (History)
0 users

Contains string that exceeds max length of Excel cell. (39.06 KB, text/plain)
2008-12-09 09:12 UTC, Terry Paul

Note You need to log in before you can comment on or make changes to this bug.
Description Terry Paul 2008-12-09 08:53:55 UTC
If the length of a HSSFRichTextString object is > 32767, then a call to the length() method returns a negative value = 32767 - length.

Though this isn't a big deal if it's expected behavior, it would be great to either change the method or update the Javadocs to specify this behavior.
Comment 1 Nick Burch 2008-12-09 08:56:54 UTC
Almost certainly a short vs int issue

Can you please upload a file that triggers this, so we have something to hand to write a unit test against?
Comment 2 Terry Paul 2008-12-09 09:12:16 UTC
Created attachment 23006 [details]
Contains string that exceeds max length of Excel cell.

The attached file contains the String that when loaded into an HSSFRichTextString causes the length() method to return a negative number.
Comment 3 Terry Paul 2008-12-09 09:18:42 UTC
Uploaded an attachment containing a String longer than 32767 to assist in testing.
Comment 4 Nick Burch 2008-12-09 09:41:26 UTC
The attached file appears to be plain text, and not an excel file :(

Any chance you could check your attachment, and re-upload?
Comment 5 Terry Paul 2008-12-09 10:22:58 UTC
Actually, I found the bug when I was creating an Excel file from an XML file, from which this plain text was extracted.

The logic that lead to the discovery was reading the text from the XML file, creating an HSSFRichTextString object with the text, and then checking the length of that HSSFRichTextString before calling HSSFCell.setCellValue() to ensure it didn't exceed our max allowable length for a cell.

Apologies for not being more clear in my original description.
Comment 6 Nick Burch 2008-12-09 11:37:37 UTC
Fixed in svn trunk, r724848