changeset 942:3abcc11cbdd0

Merge
author ddehaven
date Mon, 06 Jun 2016 13:16:44 -0700
parents 0ed304595de1 f8899b1884e2
children 0579232a1042
files
diffstat 6 files changed, 112 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/.hgtags	Wed Jun 01 15:27:49 2016 -0700
+++ b/.hgtags	Mon Jun 06 13:16:44 2016 -0700
@@ -363,3 +363,4 @@
 a8aa25fc6c5fda0ed7a93b8ffee62da326a752fc jdk-9+118
 f92e8518bb34a9628b11e662bf7308561a55eb3b jdk-9+119
 ecbe72546137cd29cb73d4dcc81cc099e847d543 jdk-9+120
+a265b8116058c56179c321c38618570b780329be jdk-9+121
--- a/src/java.xml/share/classes/javax/xml/catalog/CatalogResolverImpl.java	Wed Jun 01 15:27:49 2016 -0700
+++ b/src/java.xml/share/classes/javax/xml/catalog/CatalogResolverImpl.java	Mon Jun 06 13:16:44 2016 -0700
@@ -51,6 +51,7 @@
 
     @Override
     public InputSource resolveEntity(String publicId, String systemId) {
+        CatalogMessages.reportNPEOnNull("systemId", systemId);
         //Normalize publicId and systemId
         systemId = Normalizer.normalizeURI(Util.getNotNullOrEmpty(systemId));
         publicId = Normalizer.normalizePublicId(Normalizer.decodeURN(Util.getNotNullOrEmpty(publicId)));
--- a/src/java.xml/share/classes/org/xml/sax/helpers/NewInstance.java	Wed Jun 01 15:27:49 2016 -0700
+++ b/src/java.xml/share/classes/org/xml/sax/helpers/NewInstance.java	Mon Jun 06 13:16:44 2016 -0700
@@ -56,8 +56,8 @@
  * @version 2.0.1 (sax2r2)
  */
 class NewInstance {
-
     private static final String DEFAULT_PACKAGE = "com.sun.org.apache.xerces.internal";
+    private static final String DEFAULT_CLASS = "com.sun.org.apache.xerces.internal.parsers.SAXParser";
     /**
      * Creates a new instance of the specified class name
      *
@@ -70,11 +70,26 @@
         ClassLoader classLoader = Objects.requireNonNull(loader);
         String className = Objects.requireNonNull(clsName);
 
-        if (className.startsWith(DEFAULT_PACKAGE)) {
+        // Instantiate directly for the SAX default parser
+        if (className.equals(DEFAULT_CLASS)) {
             return type.cast(new com.sun.org.apache.xerces.internal.parsers.SAXParser());
         }
 
-        Class<?> driverClass = classLoader.loadClass(className);
+        // make sure we have access to restricted packages
+        boolean internal = false;
+        if (System.getSecurityManager() != null) {
+            if (className != null && className.startsWith(DEFAULT_PACKAGE)) {
+                internal = true;
+            }
+        }
+
+        Class<?> driverClass;
+        if (classLoader == null || internal) {
+            driverClass = Class.forName(className);
+        } else {
+            driverClass = classLoader.loadClass(className);
+        }
+
         return type.cast(driverClass.newInstance());
     }
 
--- a/test/javax/xml/jaxp/libs/catalog/ResolutionChecker.java	Wed Jun 01 15:27:49 2016 -0700
+++ b/test/javax/xml/jaxp/libs/catalog/ResolutionChecker.java	Mon Jun 06 13:16:44 2016 -0700
@@ -41,7 +41,7 @@
     static void checkExtIdResolution(CatalogResolver resolver,
             String publicId, String systemId, String matchedUri) {
         Assert.assertEquals(
-                resolver.resolveEntity(publicId, systemId).getSystemId(),
+                resolver.resolveEntity(publicId, getNotSpecified(systemId)).getSystemId(),
                 matchedUri);
     }
 
@@ -95,7 +95,7 @@
      * CatalogUriResolver should throw CatalogException.
      */
     static void checkNoMatch(CatalogUriResolver resolver) {
-        resolver.resolve("http://uri/noMatch/docNoMatch.dtd", null);
+        resolver.resolve("http://uri/noMatch/docNoMatch.dtd", getNotSpecified(null));
     }
 
     /* ********** Checks expected exception ********** */
@@ -108,7 +108,7 @@
             CatalogResolver resolver, String publicId, String systemId,
             Class<T> expectedExceptionClass) {
         expectThrows(expectedExceptionClass, () -> {
-            resolver.resolveEntity(publicId, systemId);
+            resolver.resolveEntity(publicId, getNotSpecified(systemId));
         });
     }
 
@@ -181,6 +181,18 @@
         throw new AssertionError(message);
     }
 
+    /*
+     * SystemId can never be null in XML. For publicId tests, if systemId is null,
+     * it will be considered as not-specified instead. A non-existent systemId
+     * is returned to make sure there's no match by the systemId.
+    */
+    private static String getNotSpecified(String systemId) {
+        if (systemId == null) {
+            return "not-specified-systemId.dtd";
+        }
+        return systemId;
+    }
+
     private interface ThrowingRunnable {
         void run() throws Throwable;
     }
--- a/test/javax/xml/jaxp/unittest/catalog/CatalogTest.java	Wed Jun 01 15:27:49 2016 -0700
+++ b/test/javax/xml/jaxp/unittest/catalog/CatalogTest.java	Mon Jun 06 13:16:44 2016 -0700
@@ -69,6 +69,20 @@
     }
 
     /*
+     * @bug 8150187
+     * NPE is expected if the systemId is null. The specification for systemId
+     * is as follows:
+     * A system identifier is required on all external entities. XML
+     * requires a system identifier on all external entities, so this value is
+     * always specified.
+     */
+    @Test(expectedExceptions = NullPointerException.class)
+    public void sysIdCantBeNull() {
+        CatalogResolver catalogResolver = CatalogManager.catalogResolver(CatalogFeatures.defaults());
+        InputSource is = catalogResolver.resolveEntity("-//FOO//DTD XML Dummy V0.0//EN", null);
+    }
+
+    /*
      * @bug 8156845
      * Verifies that an URI reference with a urn:publicid is correctly resolved
      * with an uri entry with a publicId.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/javax/xml/jaxp/unittest/sax/XMLReaderTest.java	Mon Jun 06 13:16:44 2016 -0700
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2016, 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 sax;
+
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.parsers.SAXParserFactory;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.Test;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.XMLReaderAdapter;
+
+/*
+ * @bug 8158246
+ * @summary This class contains tests that cover the creation of XMLReader.
+ */
+public class XMLReaderTest {
+    private final String SAX_PROPNAME = "org.xml.sax.driver";
+
+    /*
+     * Clean up after test
+     */
+    @AfterClass
+    public void cleanUp() throws Exception {
+        System.clearProperty(SAX_PROPNAME);
+    }
+
+    /*
+     * @bug 8158246
+     * Verifies that SAXException is reported when the classname specified can
+     * not be found.
+     *
+     * Except test format, this test is the same as JCK's test Ctor003.
+     */
+    @Test(expectedExceptions = SAXException.class)
+    public void testcreateXMLReader() throws SAXException, ParserConfigurationException {
+        String className = SAXParserFactory.newInstance().newSAXParser()
+                            .getXMLReader().getClass().getName();
+        System.setProperty(SAX_PROPNAME, className + "nosuch");
+        XMLReaderAdapter adapter = new XMLReaderAdapter();
+    }
+}