# HG changeset patch
# User rkennke
# Date 1565971241 -7200
# Fri Aug 16 18:00:41 2019 +0200
# Node ID 203301052e82e349a0f70d1c56d5051a5e01acd0
# Parent 3ef3348195ffeb3c268af4a43928f2f09c5fa83a
8213325: (props) Properties.loadFromXML does not fully comply with the spec
Reviewed-by: alanb, rriggs, dfuchs, naoto
diff --git a/src/share/classes/jdk/internal/org/xml/sax/DTDHandler.java b/src/share/classes/jdk/internal/org/xml/sax/DTDHandler.java
--- a/src/share/classes/jdk/internal/org/xml/sax/DTDHandler.java
+++ b/src/share/classes/jdk/internal/org/xml/sax/DTDHandler.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2000, 2018, 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
@@ -73,7 +73,6 @@
*/
public interface DTDHandler {
-
/**
* Receive notification of a notation declaration event.
*
@@ -136,6 +135,39 @@
String notationName)
throws SAXException;
+ // from SAX2 extension DeclHandler
+ /**
+ * Receive notification of the start of DTD declarations.
+ *
+ * The start/endDTD events appear within the start/endDocument events
+ * from ContentHandler.
+ *
+ * @param name The document type name.
+ * @param publicId The declared public identifier for the
+ * external DTD subset, or null if none was declared.
+ * @param systemId The declared system identifier for the
+ * external DTD subset, or null if none was declared.
+ * (Note that this is not resolved against the document
+ * base URI.)
+ * @throws SAXException the event receiver may throw an exception during processing
+ */
+ default public void startDTD (String name, String publicId, String systemId)
+ throws SAXException
+ {
+ // no op
+ }
+
+ // Custom API for the Properties
+
+ /**
+ * Receive notification of the start of DTD internal subset.
+ *
+ * @throws SAXException the event receiver may throw an exception during processing
+ */
+ default public void startInternalSub () throws SAXException
+ {
+ // no op
+ }
}
// end of DTDHandler.java
diff --git a/src/share/classes/jdk/internal/util/xml/PropertiesDefaultHandler.java b/src/share/classes/jdk/internal/util/xml/PropertiesDefaultHandler.java
--- a/src/share/classes/jdk/internal/util/xml/PropertiesDefaultHandler.java
+++ b/src/share/classes/jdk/internal/util/xml/PropertiesDefaultHandler.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, 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
@@ -53,11 +53,11 @@
private static final String ATTR_KEY = "key";
// The required DTD URI for exported properties
private static final String PROPS_DTD_DECL =
- "";
+ "";
private static final String PROPS_DTD_URI =
- "http://java.sun.com/dtd/properties.dtd";
+ "http://java.sun.com/dtd/properties.dtd";
private static final String PROPS_DTD =
- ""
+ ""
+ ""
+ ""
+ "= 0;) {
ch = getch();
@@ -2229,6 +2231,13 @@
throws SAXException;
/**
+ * Reports the start of DTD internal subset.
+ *
+ * @throws SAXException if the receiver throws SAXException
+ */
+ public abstract void startInternalSub () throws SAXException;
+
+ /**
* Reports a comment.
*
* @param text The comment text starting from first charcater.
diff --git a/src/share/classes/jdk/internal/util/xml/impl/ParserSAX.java b/src/share/classes/jdk/internal/util/xml/impl/ParserSAX.java
--- a/src/share/classes/jdk/internal/util/xml/impl/ParserSAX.java
+++ b/src/share/classes/jdk/internal/util/xml/impl/ParserSAX.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2012, 2018, 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
@@ -551,7 +551,16 @@
* @param sysid The system identifier of the entity or null
.
*/
protected void docType(String name, String pubid, String sysid) throws SAXException {
- mHandDtd.notationDecl(name, pubid, sysid);
+ mHandDtd.startDTD(name, pubid, sysid);
+ }
+
+ /**
+ * Reports the start of DTD internal subset.
+ *
+ * @throws SAXException if the receiver throws SAXException
+ */
+ public void startInternalSub () throws SAXException {
+ mHandDtd.startInternalSub();
}
/**
diff --git a/src/share/classes/sun/util/xml/META-INF/services/sun.util.spi.XmlPropertiesProvider b/src/share/classes/sun/util/xml/META-INF/services/sun.util.spi.XmlPropertiesProvider
--- a/src/share/classes/sun/util/xml/META-INF/services/sun.util.spi.XmlPropertiesProvider
+++ b/src/share/classes/sun/util/xml/META-INF/services/sun.util.spi.XmlPropertiesProvider
@@ -1,1 +1,1 @@
-sun.util.xml.PlatformXmlPropertiesProvider
+jdk.internal.util.xml.BasicXmlPropertiesProvider
diff --git a/test/java/util/Properties/Compatibility.xml b/test/java/util/Properties/Compatibility.xml
deleted file mode 100644
--- a/test/java/util/Properties/Compatibility.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
- ]>
-
-
-Property With Other Encoding
-value1
-]]>
-&intEnt;
-
diff --git a/test/java/util/Properties/CompatibilityTest.java b/test/java/util/Properties/CompatibilityTest.java
deleted file mode 100644
--- a/test/java/util/Properties/CompatibilityTest.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (c) 2012, 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 8005280 8004371
- * @summary Compatibility test
- * @run main CompatibilityTest
- * @run main/othervm -Dsun.util.spi.XmlPropertiesProvider=jdk.internal.util.xml.BasicXmlPropertiesProvider CompatibilityTest
- */
-
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Properties;
-
-/**
- * This is a behavior compatibility test.
- * Although not defined by the properties.dtd, the constructs
- * in Compatibility.xml are supported by the regular JDK XML
- * Provider.
- *
- * @author: Joe Wang
- */
-public class CompatibilityTest {
-
- public static void main(String[] args) {
- testInternalDTD();
- }
-
- /*
- * Not in the spec, but the constructs work with the current JDK
- */
- static void testInternalDTD() {
- String src = System.getProperty("test.src");
- if (src == null) {
- src = ".";
- }
- loadPropertyFile(src + "/Compatibility.xml");
- }
-
- /*
- * 'Store' the populated 'Property' with the specified 'Encoding Type' as an
- * XML file. Retrieve the same XML file and 'load' onto a new 'Property' object.
- */
- static void loadPropertyFile(String filename) {
- try (InputStream in = new FileInputStream(filename)) {
- Properties prop = new Properties();
- prop.loadFromXML(in);
- verifyProperites(prop);
- } catch (IOException ex) {
- fail(ex.getMessage());
- }
- }
-
- /*
- * This method verifies the first key-value with the original string.
- */
- static void verifyProperites(Properties prop) {
- try {
- for (String key : prop.stringPropertyNames()) {
- String val = prop.getProperty(key);
- if (key.equals("Key1")) {
- if (!val.equals("value1")) {
- fail("Key:" + key + "'s value: \nExpected: value1\nFound: " + val);
- }
- } else if (key.equals("Key2")) {
- if (!val.equals("")) {
- fail("Key:" + key + "'s value: \nExpected: \nFound: " + val);
- }
- } else if (key.equals("Key3")) {
- if (!val.equals("value3")) {
- fail("Key:" + key + "'s value: \nExpected: value3\nFound: " + val);
- }
- }
- }
- } catch (Exception e) {
- fail(e.getMessage());
- }
-
- }
-
- static void fail(String err) {
- throw new RuntimeException(err);
- }
-
-}
diff --git a/test/java/util/Properties/invalidxml/IllegalElement.xml b/test/java/util/Properties/invalidxml/IllegalElement.xml
new file mode 100644
--- /dev/null
+++ b/test/java/util/Properties/invalidxml/IllegalElement.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+comment
+
+ value of the first key
+
+
diff --git a/test/java/util/Properties/invalidxml/invalidDTD.xml b/test/java/util/Properties/invalidxml/invalidDTD.xml
new file mode 100644
--- /dev/null
+++ b/test/java/util/Properties/invalidxml/invalidDTD.xml
@@ -0,0 +1,10 @@
+
+ ]>
+
+
+Property With Other Encoding
+value1
+]]>
+&intEnt;
+
diff --git a/test/java/util/ResourceBundle/Control/XmlRB.xml b/test/java/util/ResourceBundle/Control/XmlRB.xml
--- a/test/java/util/ResourceBundle/Control/XmlRB.xml
+++ b/test/java/util/ResourceBundle/Control/XmlRB.xml
@@ -2,15 +2,7 @@
-
-
-
-
-
-
-]>
-
+
Test data for XMLResourceBundleTest.java
XML
diff --git a/test/java/util/ResourceBundle/Control/XmlRB_ja.xml b/test/java/util/ResourceBundle/Control/XmlRB_ja.xml
--- a/test/java/util/ResourceBundle/Control/XmlRB_ja.xml
+++ b/test/java/util/ResourceBundle/Control/XmlRB_ja.xml
@@ -2,15 +2,7 @@
-
-
-
-
-
-
-]>
-
+
Test data for XMLResourceBundleTest.java
XML
diff --git a/test/java/util/spi/ResourceBundleControlProvider/providersrc/XmlRB.xml b/test/java/util/spi/ResourceBundleControlProvider/providersrc/XmlRB.xml
--- a/test/java/util/spi/ResourceBundleControlProvider/providersrc/XmlRB.xml
+++ b/test/java/util/spi/ResourceBundleControlProvider/providersrc/XmlRB.xml
@@ -25,15 +25,7 @@
-->
-
-
-
-
-
-
-]>
-
+
Test data for UserDefaultControlTest.java
XML
diff --git a/test/java/util/spi/ResourceBundleControlProvider/providersrc/XmlRB_ja.xml b/test/java/util/spi/ResourceBundleControlProvider/providersrc/XmlRB_ja.xml
--- a/test/java/util/spi/ResourceBundleControlProvider/providersrc/XmlRB_ja.xml
+++ b/test/java/util/spi/ResourceBundleControlProvider/providersrc/XmlRB_ja.xml
@@ -25,15 +25,7 @@
-->
-
-
-
-
-
-
-]>
-
+
Test data for UserDefaultControlTest.java
XML
diff --git a/test/java/util/spi/ResourceBundleControlProvider/rbcontrolprovider.jar b/test/java/util/spi/ResourceBundleControlProvider/rbcontrolprovider.jar
index b7e6a491d7910a79c5f14b8cba79029b252e64f3..f01d60c11b103039ef13d1f582942114ab50ecb1
GIT binary patch
literal 5693
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
A=>Px#