Summary: | ArrayIndexOfBounds exception when getColumnWidth() | ||
---|---|---|---|
Product: | POI | Reporter: | Dmytro Sylaiev <dmytro.sylaiev> |
Component: | XSSF | Assignee: | POI Developers List <dev> |
Status: | RESOLVED FIXED | ||
Severity: | major | ||
Priority: | P2 | ||
Version: | 3.17-FINAL | ||
Target Milestone: | --- | ||
Hardware: | PC | ||
OS: | All |
Description
Dmytro Sylaiev
2018-02-16 09:03:22 UTC
I've had a go at creating a unit test for this problem in r1824451, but it isn't triggering the bug, despite creating 50,000 fonts Could you take a look at that test, and suggest what we need to do to re-produce the bug you're seeing? I independently put together a change to use ints instead of shorts for indexing fonts. https://github.com/apache/poi/pull/102 Still would be good to have a reproducible test case though. Since the font index value is an xsd:unsignedInt, maybe a long is the appropriate data type. I know Java 8 kinda halfheartedly supports unsigned ints by adding some methods that treat an int as unsigned to the Integer class. maybe that will be sufficient here. It just seems to be a kludge to me. If we go with the Java 8 view of unsigned int we need to make sure to document that the font index is an unsigned int rather than the typical signed int. Java 8's unsigned int support is not at all nice. We have limitations about supporting long - eg a lot of the XSSF clases used Lists and this has the method `E get(int index);` I would argue that the pragmatic solution is to just support ints and not worry too much about the the fact that max-unsigned-int is aprox twice max-signed-int. It's taken this long for someone to run into the `short` limitation. Dmytro Sylaiev - could you test with the latest code? Some changes were added to support ints instead of shorts? Could you please share latest snapshot? Look at https://builds.apache.org/view/P/view/POI/job/POI-DSL-1.8/lastSuccessfulBuild/artifact/ for latest build results. The code that is involved in the stacktrace in the original report now uses int and style.getFontIndexAsInt(), so the casting to short does not happen any more. If there is still a problem please report a new bug with a reproducible test-case as reproducing the problem seems to be harder than thought. See also r1824826 |