8322708: Global HTML attributes are not allowed
Reviewed-by: jjg
This commit is contained in:
parent
642084629a
commit
5cad0b4df7
@ -690,7 +690,9 @@ public class Checker extends DocTreePathScanner<Void, Void> {
|
|||||||
}
|
}
|
||||||
// for now, doclint allows all attribute names beginning with "on" as event handler names,
|
// for now, doclint allows all attribute names beginning with "on" as event handler names,
|
||||||
// without checking the validity or applicability of the name
|
// without checking the validity or applicability of the name
|
||||||
if (!name.toString().startsWith("on")) {
|
// custom "data-*" attributes are also accepted
|
||||||
|
var attrName = name.toString();
|
||||||
|
if (!attrName.startsWith("on") && !attrName.startsWith("data-")) {
|
||||||
AttrKind k = currTag.getAttrKind(name);
|
AttrKind k = currTag.getAttrKind(name);
|
||||||
switch (k) {
|
switch (k) {
|
||||||
case OK -> { }
|
case OK -> { }
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2010, 2022, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2010, 2024, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -434,57 +434,76 @@ public enum HtmlTag {
|
|||||||
|
|
||||||
public enum Attr {
|
public enum Attr {
|
||||||
ABBR,
|
ABBR,
|
||||||
|
ACCESSKEY(true),
|
||||||
ALIGN,
|
ALIGN,
|
||||||
ALINK,
|
ALINK,
|
||||||
ALT,
|
ALT,
|
||||||
ARIA_ACTIVEDESCENDANT,
|
ARIA_ACTIVEDESCENDANT(true),
|
||||||
ARIA_CONTROLS,
|
ARIA_CONTROLS(true),
|
||||||
ARIA_DESCRIBEDBY,
|
ARIA_DESCRIBEDBY(true),
|
||||||
ARIA_EXPANDED,
|
ARIA_EXPANDED(true),
|
||||||
ARIA_LABEL,
|
ARIA_LABEL(true),
|
||||||
ARIA_LABELLEDBY,
|
ARIA_LABELLEDBY(true),
|
||||||
ARIA_LEVEL,
|
ARIA_LEVEL(true),
|
||||||
ARIA_MULTISELECTABLE,
|
ARIA_MULTISELECTABLE(true),
|
||||||
ARIA_OWNS,
|
ARIA_OWNS(true),
|
||||||
ARIA_POSINSET,
|
ARIA_POSINSET(true),
|
||||||
ARIA_SETSIZE,
|
ARIA_READONLY(true),
|
||||||
ARIA_READONLY,
|
ARIA_REQUIRED(true),
|
||||||
ARIA_REQUIRED,
|
ARIA_SELECTED(true),
|
||||||
ARIA_SELECTED,
|
ARIA_SETSIZE(true),
|
||||||
ARIA_SORT,
|
ARIA_SORT(true),
|
||||||
|
AUTOCAPITALIZE(true),
|
||||||
|
AUTOFOCUS(true),
|
||||||
AXIS,
|
AXIS,
|
||||||
BACKGROUND,
|
BACKGROUND,
|
||||||
BGCOLOR,
|
BGCOLOR,
|
||||||
BORDER,
|
BORDER,
|
||||||
CELLSPACING,
|
|
||||||
CELLPADDING,
|
CELLPADDING,
|
||||||
|
CELLSPACING,
|
||||||
CHAR,
|
CHAR,
|
||||||
CHAROFF,
|
CHAROFF,
|
||||||
CHARSET,
|
CHARSET,
|
||||||
CITE,
|
CITE,
|
||||||
|
CLASS(true),
|
||||||
CLEAR,
|
CLEAR,
|
||||||
CLASS,
|
|
||||||
COLOR,
|
COLOR,
|
||||||
COLSPAN,
|
COLSPAN,
|
||||||
COMPACT,
|
COMPACT,
|
||||||
|
CONTENTEDITABLE(true),
|
||||||
COORDS,
|
COORDS,
|
||||||
CROSSORIGIN,
|
CROSSORIGIN,
|
||||||
DATETIME,
|
DATETIME,
|
||||||
|
DIR(true),
|
||||||
|
DRAGGABLE(true),
|
||||||
|
ENTERKEYHINT(true),
|
||||||
FACE,
|
FACE,
|
||||||
FRAME,
|
FRAME,
|
||||||
FRAMEBORDER,
|
FRAMEBORDER,
|
||||||
HEADERS,
|
HEADERS,
|
||||||
HEIGHT,
|
HEIGHT,
|
||||||
|
HIDDEN(true),
|
||||||
HREF,
|
HREF,
|
||||||
HSPACE,
|
HSPACE,
|
||||||
ID,
|
ID(true),
|
||||||
|
INERT(true),
|
||||||
|
INPUTMODE(true),
|
||||||
|
IS(true),
|
||||||
|
ITEMID(true),
|
||||||
|
ITEMPROP(true),
|
||||||
|
ITEMREF(true),
|
||||||
|
ITEMSCOPE(true),
|
||||||
|
ITEMTYPE(true),
|
||||||
|
LANG(true),
|
||||||
LINK,
|
LINK,
|
||||||
LONGDESC,
|
LONGDESC,
|
||||||
MARGINHEIGHT,
|
MARGINHEIGHT,
|
||||||
MARGINWIDTH,
|
MARGINWIDTH,
|
||||||
NAME,
|
NAME,
|
||||||
|
NONCE(true),
|
||||||
NOSHADE,
|
NOSHADE,
|
||||||
NOWRAP,
|
NOWRAP,
|
||||||
|
POPOVER(true),
|
||||||
PROFILE,
|
PROFILE,
|
||||||
REV,
|
REV,
|
||||||
REVERSED,
|
REVERSED,
|
||||||
@ -497,24 +516,39 @@ public enum HtmlTag {
|
|||||||
SHAPE,
|
SHAPE,
|
||||||
SIZE,
|
SIZE,
|
||||||
SPACE,
|
SPACE,
|
||||||
|
SPELLCHECK(true),
|
||||||
SRC,
|
SRC,
|
||||||
START,
|
START,
|
||||||
STYLE,
|
STYLE(true),
|
||||||
SUMMARY,
|
SUMMARY,
|
||||||
|
TABINDEX(true),
|
||||||
TARGET,
|
TARGET,
|
||||||
TEXT,
|
TEXT,
|
||||||
|
TITLE(true),
|
||||||
|
TRANSLATE(true),
|
||||||
TYPE,
|
TYPE,
|
||||||
VALIGN,
|
VALIGN,
|
||||||
VALUE,
|
VALUE,
|
||||||
VERSION,
|
VERSION,
|
||||||
VLINK,
|
VLINK,
|
||||||
VSPACE,
|
VSPACE,
|
||||||
WIDTH;
|
WIDTH,
|
||||||
|
WRITINGSUGGESTIONS(true);
|
||||||
|
|
||||||
private final String name;
|
private final String name;
|
||||||
|
private final boolean isGlobal;
|
||||||
|
|
||||||
Attr() {
|
Attr() {
|
||||||
|
this(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
Attr(boolean flag) {
|
||||||
name = StringUtils.toLowerCase(name().replace("_", "-"));
|
name = StringUtils.toLowerCase(name().replace("_", "-"));
|
||||||
|
isGlobal = flag;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isGlobal() {
|
||||||
|
return isGlobal;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getText() {
|
public String getText() {
|
||||||
@ -632,8 +666,13 @@ public enum HtmlTag {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public AttrKind getAttrKind(Name attrName) {
|
public AttrKind getAttrKind(Name attrName) {
|
||||||
AttrKind k = attrs.get(getAttr(attrName)); // null-safe
|
Attr attr = getAttr(attrName);
|
||||||
return (k == null) ? AttrKind.INVALID : k;
|
if (attr == null) {
|
||||||
|
return AttrKind.INVALID;
|
||||||
|
}
|
||||||
|
return attr.isGlobal() ?
|
||||||
|
AttrKind.OK :
|
||||||
|
attrs.getOrDefault(attr, AttrKind.INVALID);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static AttrMap attrs(AttrKind k, Attr... attrs) {
|
private static AttrMap attrs(AttrKind k, Attr... attrs) {
|
||||||
|
@ -0,0 +1,90 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2024, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @test
|
||||||
|
* @bug 8322708
|
||||||
|
* @summary Test to make sure global tags work properly
|
||||||
|
* @library /tools/lib ../../lib
|
||||||
|
* @modules jdk.javadoc/jdk.javadoc.internal.tool
|
||||||
|
* @build toolbox.ToolBox javadoc.tester.*
|
||||||
|
* @run main TestGlobalHtml
|
||||||
|
*/
|
||||||
|
|
||||||
|
import javadoc.tester.JavadocTester;
|
||||||
|
import toolbox.ToolBox;
|
||||||
|
|
||||||
|
import java.nio.file.Path;
|
||||||
|
|
||||||
|
public class TestGlobalHtml extends JavadocTester {
|
||||||
|
ToolBox tb = new ToolBox();
|
||||||
|
|
||||||
|
public static void main(String... args) throws Exception {
|
||||||
|
var tester = new TestGlobalHtml();
|
||||||
|
tester.runTests();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGlobalTags() {
|
||||||
|
javadoc("--allow-script-in-comments",
|
||||||
|
"-d",
|
||||||
|
"out-global",
|
||||||
|
"-sourcepath",
|
||||||
|
testSrc,
|
||||||
|
"pkg1");
|
||||||
|
checkExit(Exit.OK);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNegative(Path base) throws Exception {
|
||||||
|
Path src = base.resolve("src");
|
||||||
|
tb.writeJavaFiles(src,
|
||||||
|
"""
|
||||||
|
package p;
|
||||||
|
/**
|
||||||
|
* class comment
|
||||||
|
* <a href="https://openjdk.org/">Hyperlink to the OpenJDK website</a>
|
||||||
|
*/
|
||||||
|
public class C {
|
||||||
|
/**
|
||||||
|
* <form>
|
||||||
|
* <label for="methodname">Method name:</label><br>
|
||||||
|
* <input type="text" id="methodname" name="methodname"><br>
|
||||||
|
* <label for="paramname">Method Parameter:</label><br>
|
||||||
|
* <input type="text" id="paramname" name="paramname">
|
||||||
|
* </form>
|
||||||
|
*/
|
||||||
|
public C() {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
""");
|
||||||
|
|
||||||
|
javadoc("--allow-script-in-comments",
|
||||||
|
"-d",
|
||||||
|
"out-negative",
|
||||||
|
"-sourcepath",
|
||||||
|
src.toString(),
|
||||||
|
"p");
|
||||||
|
checkExit(Exit.ERROR);
|
||||||
|
}
|
||||||
|
}
|
105
test/langtools/jdk/javadoc/doclet/TestGlobalHtml/pkg1/C1.java
Normal file
105
test/langtools/jdk/javadoc/doclet/TestGlobalHtml/pkg1/C1.java
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2024, 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package pkg1;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <div inert>
|
||||||
|
* <p> This content is inert and not interactable.</p>
|
||||||
|
* <a href="https://openjdk.org/" title="OpenJDK's Website" tabindex="0">
|
||||||
|
* Visit OpenJDK's Website!
|
||||||
|
* </a>
|
||||||
|
* </div>
|
||||||
|
*
|
||||||
|
* <div>
|
||||||
|
* <p autocapitalize="on">This content is interactable.</p>
|
||||||
|
* <a href="https://openjdk.org/" title="OpenJDK's Website" tabindex="0">
|
||||||
|
* Visit OpenJDK's Website!
|
||||||
|
* </a>
|
||||||
|
* </div>
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* <div dir="ltr" lang="en">
|
||||||
|
* <p itemprop="description">This is used in a jtreg test to check that global HTML tags are allowed</p>
|
||||||
|
* <ul spellcheck="true">
|
||||||
|
* <li>Class C</li>
|
||||||
|
* <li>Has a default constructor</li>
|
||||||
|
* </ul>
|
||||||
|
* </div>
|
||||||
|
*
|
||||||
|
* <p contenteditable="true" inputmode="text">Here is a description of the class and methods:</p>
|
||||||
|
*
|
||||||
|
* <ol draggable="true" tabindex="0">
|
||||||
|
* <li><p accesskey="1" data-element-type="constructor" title="Class Details">Has a default constructor</p></li>
|
||||||
|
* <li><p accesskey="2" data-element-type="toString" title="Methods Summary">Overrides toString method</p></li>
|
||||||
|
* <li><p accesskey="3" data-element-type="other" title="Usage Example">Is used for testing</p></li>
|
||||||
|
* </ol>
|
||||||
|
*
|
||||||
|
* <div itemscope>
|
||||||
|
* <p itemprop="name">C1</p>
|
||||||
|
* <p itemprop="description">C1</p>
|
||||||
|
* </div>
|
||||||
|
*/
|
||||||
|
public class C1 {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p lang="en" accesskey="D" autocapitalize="on" draggable="true" spellcheck="false">
|
||||||
|
* Default constructor for the {@code C1} class. (this content is draggable!) </p>
|
||||||
|
* <div lang="en" contenteditable="true">
|
||||||
|
* <p itemprop="creator">Author: try editing this content!</p>
|
||||||
|
* <p title="Creation Date">Created on: June 14 2024</p>
|
||||||
|
* </div>
|
||||||
|
*/
|
||||||
|
public C1() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A method in C1
|
||||||
|
*
|
||||||
|
* <p lang="en" inputmode="numeric">simple method.</p>
|
||||||
|
*
|
||||||
|
* <div itemprop="method" itemscope>
|
||||||
|
* <p itemprop="name">method m</p>
|
||||||
|
* <p itemprop="description">the method m does nothing</p>
|
||||||
|
* </div>
|
||||||
|
*/
|
||||||
|
public void m() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A toString Override.
|
||||||
|
*
|
||||||
|
* <p dir="ltr" spellcheck="true">returns a String Object.</p>
|
||||||
|
*
|
||||||
|
* <div itemprop="method" itemscope>
|
||||||
|
* <p itemprop="name">toString</p>
|
||||||
|
* </div>
|
||||||
|
*
|
||||||
|
* @return a string.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "C1";
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user