ArrayIndexOutOfBoundsException from Renderer: negative left margin.
Brought to you by:
mjericho
An ArrayIndexOutOfBoundsException is thrown from Renderer with negative left margin.
The following code reproduces issue seen:
@Test
public void test()
{
final String content = "<html>\n" +
" <body>\n" +
// " <div style=\"margin:0px 0px 0px -12px;\">\n" + // works
// " <div style=\"margin:0px 0px 0px -13px;\">\n" + // Throws ArrayIndexOutOfBoundException
" <div style=\"margin-left: -13px;\">\n" + // Throws ArrayIndexOutOfBoundException
" </div>\n" +
" </body>\n" +
"</html>";
final Source source = new Source(content);
final Renderer renderer = new Renderer(source);
renderer.toString(); // Throws here
}
-13 causes exception, -12 does not.
Stack trace is as follows:
java.lang.ArrayIndexOutOfBoundsException: Index -2 out of bounds for length 9
at net.htmlparser.jericho.Renderer.getSpaces(Renderer.java:928)
at net.htmlparser.jericho.Renderer.access$100(Renderer.java:62)
at net.htmlparser.jericho.Renderer$AbstractBlockElementHandler.process(Renderer.java:1371)
at net.htmlparser.jericho.Renderer$Processor.appendSegmentProcessingChildElements(Renderer.java:1071)
at net.htmlparser.jericho.Renderer$Processor.appendElementContent(Renderer.java:1063)
at net.htmlparser.jericho.Renderer$Processor.access$500(Renderer.java:936)
at net.htmlparser.jericho.Renderer$StandardInlineElementHandler.process(Renderer.java:1324)
at net.htmlparser.jericho.Renderer$Processor.appendSegmentProcessingChildElements(Renderer.java:1071)
at net.htmlparser.jericho.Renderer$Processor.appendElementContent(Renderer.java:1063)
at net.htmlparser.jericho.Renderer$Processor.access$500(Renderer.java:936)
at net.htmlparser.jericho.Renderer$StandardInlineElementHandler.process(Renderer.java:1324)
at net.htmlparser.jericho.Renderer$Processor.appendSegmentProcessingChildElements(Renderer.java:1071)
at net.htmlparser.jericho.Renderer$Processor.appendTo(Renderer.java:995)
at net.htmlparser.jericho.Renderer.appendTo(Renderer.java:157)
at net.htmlparser.jericho.CharStreamSourceUtil.toString(CharStreamSourceUtil.java:67)
at net.htmlparser.jericho.Renderer.toString(Renderer.java:167)
at com.example.Test.test(Test.java:20)
Thanks for the bug report!
Fixed in version 3.5.
Negative margins and padding are now treated as zero margin.
Until version 3.5 is officially released, the development version is available here:
http://jericho.htmlparser.net/temp/jericho-html-3.5-dev.zip
Although it has been almost 5 years since the last official release, version 3.5 includes a new major feature that requires significant time to document, and I don't envisage having spare time in the foreseeable future. So the official 3.5 release may still be some time away.
Thanks Martin,
Dev release looks to do the job! I can use this until 3.5 is officially released.