# HG changeset patch # User aivanov # Date 1429191153 -3600 # Node ID 33f6353ec0435896b269cb7325685e2bcb08e08a # Parent a77083748efc744ff8558c00eb279a1265859d2a 8074956: ArrayIndexOutOfBoundsException in javax.swing.text.html.parser.ContentModel.first() Reviewed-by: alexsch, alexp diff -r a77083748efc -r 33f6353ec043 jdk/src/java.desktop/share/classes/javax/swing/text/html/parser/ContentModel.java --- a/jdk/src/java.desktop/share/classes/javax/swing/text/html/parser/ContentModel.java Wed Apr 15 14:28:43 2015 -0700 +++ b/jdk/src/java.desktop/share/classes/javax/swing/text/html/parser/ContentModel.java Thu Apr 16 14:32:33 2015 +0100 @@ -192,10 +192,9 @@ case '|': case '&': { Element e = (Element) token; - if (valSet == null) { + if (valSet == null || valSet.length <= Element.getMaxIndex()) { valSet = new boolean[Element.getMaxIndex() + 1]; val = new boolean[valSet.length]; - // All Element instances are created before this ever executes } if (valSet[e.index]) { return val[e.index]; diff -r a77083748efc -r 33f6353ec043 jdk/test/javax/swing/text/html/parser/8074956/bug8074956.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/javax/swing/text/html/parser/8074956/bug8074956.java Thu Apr 16 14:32:33 2015 +0100 @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +import javax.swing.text.html.parser.ContentModel; +import javax.swing.text.html.parser.DTD; +import javax.swing.text.html.parser.Element; + +/* + * @test + * @bug 8074956 + * @author Alexey Ivanov + * @summary Tests correct handling of additional HTML elements in ContentModel + * @run main bug8074956 + */ +public class bug8074956 { + public static void main(String[] args) throws Exception { + final DTD html32 = DTD.getDTD("html32"); + ContentModel contentModel = new ContentModel('&', new ContentModel()); + + Element elem1 = html32.getElement("html-element"); + contentModel.first(elem1); + + Element elem2 = html32.getElement("test-element"); + // Shouldn't throw ArrayIndexOutOfBoundsException + contentModel.first(elem2); + } +}