8316383: NullPointerException in AbstractSAXParser after JDK-8306632
Reviewed-by: lancea, naoto
This commit is contained in:
parent
3b397c8552
commit
4e5717754a
@ -27,7 +27,9 @@ import com.sun.org.apache.xerces.internal.xni.grammars.XMLGrammarPool;
|
|||||||
import com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration;
|
import com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration;
|
||||||
import jdk.xml.internal.JdkConstants;
|
import jdk.xml.internal.JdkConstants;
|
||||||
import jdk.xml.internal.JdkProperty;
|
import jdk.xml.internal.JdkProperty;
|
||||||
|
import jdk.xml.internal.Utils;
|
||||||
import jdk.xml.internal.XMLSecurityManager;
|
import jdk.xml.internal.XMLSecurityManager;
|
||||||
|
import org.xml.sax.SAXException;
|
||||||
import org.xml.sax.SAXNotRecognizedException;
|
import org.xml.sax.SAXNotRecognizedException;
|
||||||
import org.xml.sax.SAXNotSupportedException;
|
import org.xml.sax.SAXNotSupportedException;
|
||||||
|
|
||||||
@ -39,7 +41,7 @@ import org.xml.sax.SAXNotSupportedException;
|
|||||||
* @author Arnaud Le Hors, IBM
|
* @author Arnaud Le Hors, IBM
|
||||||
* @author Andy Clark, IBM
|
* @author Andy Clark, IBM
|
||||||
*
|
*
|
||||||
* @LastModified: July 2023
|
* @LastModified: Sep 2023
|
||||||
*/
|
*/
|
||||||
public class SAXParser
|
public class SAXParser
|
||||||
extends AbstractSAXParser {
|
extends AbstractSAXParser {
|
||||||
@ -89,6 +91,7 @@ public class SAXParser
|
|||||||
*/
|
*/
|
||||||
public SAXParser(XMLParserConfiguration config) {
|
public SAXParser(XMLParserConfiguration config) {
|
||||||
super(config);
|
super(config);
|
||||||
|
initSecurityManager();
|
||||||
} // <init>(XMLParserConfiguration)
|
} // <init>(XMLParserConfiguration)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -125,6 +128,7 @@ public class SAXParser
|
|||||||
fConfiguration.setProperty(XMLGRAMMAR_POOL, grammarPool);
|
fConfiguration.setProperty(XMLGRAMMAR_POOL, grammarPool);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
initSecurityManager();
|
||||||
} // <init>(SymbolTable,XMLGrammarPool)
|
} // <init>(SymbolTable,XMLGrammarPool)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -152,16 +156,6 @@ public class SAXParser
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (securityManager == null) {
|
|
||||||
securityManager = new XMLSecurityManager(true);
|
|
||||||
super.setProperty(Constants.SECURITY_MANAGER, securityManager);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (securityPropertyManager == null) {
|
|
||||||
securityPropertyManager = new XMLSecurityPropertyManager();
|
|
||||||
super.setProperty(JdkConstants.XML_SECURITY_PROPERTY_MANAGER, securityPropertyManager);
|
|
||||||
}
|
|
||||||
|
|
||||||
int index = securityPropertyManager.getIndex(name);
|
int index = securityPropertyManager.getIndex(name);
|
||||||
if (index > -1) {
|
if (index > -1) {
|
||||||
/**
|
/**
|
||||||
@ -178,4 +172,25 @@ public class SAXParser
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initiates the SecurityManager. This becomes necessary when the SAXParser
|
||||||
|
* is constructed directly by, for example, XMLReaderFactory rather than
|
||||||
|
* through SAXParserFactory.
|
||||||
|
*/
|
||||||
|
private void initSecurityManager() {
|
||||||
|
try {
|
||||||
|
if (securityManager == null) {
|
||||||
|
securityManager = new XMLSecurityManager(true);
|
||||||
|
super.setProperty(Constants.SECURITY_MANAGER, securityManager);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (securityPropertyManager == null) {
|
||||||
|
securityPropertyManager = new XMLSecurityPropertyManager();
|
||||||
|
super.setProperty(JdkConstants.XML_SECURITY_PROPERTY_MANAGER, securityPropertyManager);
|
||||||
|
}
|
||||||
|
} catch (SAXException e) {
|
||||||
|
Utils.dPrint(() -> e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
} // class SAXParser
|
} // class SAXParser
|
||||||
|
@ -26,11 +26,38 @@
|
|||||||
package jdk.xml.internal;
|
package jdk.xml.internal;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* General utility. Use JdkXmlUtils for XML processing related functions.
|
* General utility. Use JdkXmlUtils for XML processing related functions.
|
||||||
*/
|
*/
|
||||||
public class Utils {
|
public class Utils {
|
||||||
|
// The debug flag
|
||||||
|
private static boolean debug = false;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The {@systemProperty jaxp.debug} property is supported by JAXP factories
|
||||||
|
* and used to print out information related to the configuration of factories
|
||||||
|
* and processors
|
||||||
|
*/
|
||||||
|
static {
|
||||||
|
try {
|
||||||
|
String val = SecuritySupport.getSystemProperty("jaxp.debug");
|
||||||
|
// Allow simply setting the prop to turn on debug
|
||||||
|
debug = val != null && !"false".equals(val);
|
||||||
|
}
|
||||||
|
catch (SecurityException se) {
|
||||||
|
debug = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// print out debug information if jaxp.debug is enabled
|
||||||
|
public static void dPrint(Supplier<String> msgGen) {
|
||||||
|
if (debug) {
|
||||||
|
System.err.println("JAXP: " + msgGen.get());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new array with copies of the original array and additional items
|
* Creates a new array with copies of the original array and additional items
|
||||||
* appended to the end of it.
|
* appended to the end of it.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2016, 2023, 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
|
||||||
@ -33,11 +33,13 @@ import org.testng.annotations.AfterClass;
|
|||||||
import org.testng.annotations.Listeners;
|
import org.testng.annotations.Listeners;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
import org.xml.sax.SAXException;
|
import org.xml.sax.SAXException;
|
||||||
|
import org.xml.sax.XMLReader;
|
||||||
import org.xml.sax.helpers.XMLReaderAdapter;
|
import org.xml.sax.helpers.XMLReaderAdapter;
|
||||||
|
import org.xml.sax.helpers.XMLReaderFactory;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* @test
|
* @test
|
||||||
* @bug 8158246
|
* @bug 8158246 8316383
|
||||||
* @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest
|
* @library /javax/xml/jaxp/libs /javax/xml/jaxp/unittest
|
||||||
* @run testng/othervm -DrunSecMngr=true -Djava.security.manager=allow sax.XMLReaderTest
|
* @run testng/othervm -DrunSecMngr=true -Djava.security.manager=allow sax.XMLReaderTest
|
||||||
* @run testng/othervm sax.XMLReaderTest
|
* @run testng/othervm sax.XMLReaderTest
|
||||||
@ -69,4 +71,15 @@ public class XMLReaderTest {
|
|||||||
setSystemProperty(SAX_PROPNAME, className + "nosuch");
|
setSystemProperty(SAX_PROPNAME, className + "nosuch");
|
||||||
XMLReaderAdapter adapter = new XMLReaderAdapter();
|
XMLReaderAdapter adapter = new XMLReaderAdapter();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @bug 8316383
|
||||||
|
* Verifies that the XMLReader is initialized properly when it's created
|
||||||
|
* with XMLReaderFactory.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testCreateXMLReaderWithXMLReaderFactory() throws SAXException, ParserConfigurationException {
|
||||||
|
XMLReader reader = XMLReaderFactory.createXMLReader();
|
||||||
|
reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user