Menu

#89 ArrayIndexOutOfBoundsException from Renderer: negative left margin.

General
open-fixed
None
5
2020-07-18
2020-04-16
No

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)

Discussion

  • Martin Jericho

    Martin Jericho - 2020-04-19

    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.

     
  • David Cockbill

    David Cockbill - 2020-04-20

    Thanks Martin,

    Dev release looks to do the job! I can use this until 3.5 is officially released.

     
  • Martin Jericho

    Martin Jericho - 2020-07-18
    • status: unread --> open-fixed
     

Log in to post a comment.

MongoDB Logo MongoDB