OpenJDK / jdk / jdk
changeset 27488:0422f7235c7a
8059327: XML parser returns corrupt attribute value
Reviewed-by: lancea
author | joehw |
---|---|
date | Fri, 07 Nov 2014 13:23:36 -0800 |
parents | 106d0156648d |
children | cf53b2c02ebb |
files | jdk/test/javax/xml/jaxp/testng/parse/XMLEntityScannerLoad.java |
diffstat | 1 files changed, 52 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jdk/test/javax/xml/jaxp/testng/parse/XMLEntityScannerLoad.java Fri Nov 07 13:23:36 2014 -0800 @@ -0,0 +1,52 @@ +package parse; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; + +import static org.testng.Assert.assertEquals; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import org.w3c.dom.Document; +import org.xml.sax.SAXException; + +/** + * JDK-8059327: XML parser returns corrupt attribute value + * https://bugs.openjdk.java.net/browse/JDK-8059327 + * + * Also: + * JDK-8061550: XMLEntityScanner can corrupt corrupt content during parsing + * https://bugs.openjdk.java.net/browse/JDK-8061550 + * + * @Summary: verify that the character cache in XMLEntityScanner is reset properly + */ + +public class XMLEntityScannerLoad { + + @Test(dataProvider = "xmls") + public void test(String xml) throws SAXException, IOException, ParserConfigurationException { + Document d = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new ChunkInputStream(xml)); + String value = d.getDocumentElement().getAttribute("a1"); + assertEquals(value, "w"); + } + + static class ChunkInputStream extends ByteArrayInputStream { + ChunkInputStream(String xml) { + super(xml.getBytes()); + } + + @Override + public synchronized int read(byte[] b, int off, int len) { + return super.read(b, off, 7); + } + } + + @DataProvider(name = "xmls") + private Object[][] xmls() { + return new Object[][] { + {"<?xml version=\"1.0\"?><element a1=\"w\" a2=\"""\"/>"}, + {"<?xml version=\"1.1\"?><element a1=\"w\" a2=\"""\"/>"} + }; + } +}