8153781: Issue in XMLScanner: EXPECTED_SQUARE_BRACKET_TO_CLOSE_INTERNAL_SUBSET when skipping large DOCTYPE section with CRLF at wrong place
Reviewed-by: joehw
This commit is contained in:
parent
4935f9d64d
commit
d03b607896
@ -1,15 +1,16 @@
|
||||
/*
|
||||
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright 2005 The Apache Software Foundation.
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@ -24,7 +25,6 @@ import com.sun.org.apache.xerces.internal.impl.msg.XMLMessageFormatter;
|
||||
import com.sun.org.apache.xerces.internal.util.XML11Char;
|
||||
import com.sun.org.apache.xerces.internal.util.XMLChar;
|
||||
import com.sun.org.apache.xerces.internal.util.XMLStringBuffer;
|
||||
import com.sun.org.apache.xerces.internal.utils.XMLSecurityManager;
|
||||
import com.sun.org.apache.xerces.internal.utils.XMLSecurityManager.Limit;
|
||||
import com.sun.org.apache.xerces.internal.xni.QName;
|
||||
import com.sun.org.apache.xerces.internal.xni.XMLString;
|
||||
@ -815,7 +815,7 @@ public class XML11EntityScanner
|
||||
load(0, true, true);
|
||||
}
|
||||
else if (fCurrentEntity.position == fCurrentEntity.count - 1) {
|
||||
invokeListeners(0);
|
||||
invokeListeners(1);
|
||||
fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1];
|
||||
load(1, false, false);
|
||||
fCurrentEntity.position = 0;
|
||||
@ -960,7 +960,7 @@ public class XML11EntityScanner
|
||||
load(0, true, true);
|
||||
}
|
||||
else if (fCurrentEntity.position == fCurrentEntity.count - 1) {
|
||||
invokeListeners(0);
|
||||
invokeListeners(1);
|
||||
fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1];
|
||||
load(1, false, false);
|
||||
fCurrentEntity.startPosition = 0;
|
||||
@ -1397,7 +1397,7 @@ public class XML11EntityScanner
|
||||
fCurrentEntity.lineNumber++;
|
||||
fCurrentEntity.columnNumber = 1;
|
||||
if (fCurrentEntity.position == fCurrentEntity.count - 1) {
|
||||
invokeListeners(0);
|
||||
invokeListeners(1);
|
||||
fCurrentEntity.ch[0] = (char)c;
|
||||
entityChanged = load(1, true, false);
|
||||
if (!entityChanged) {
|
||||
@ -1446,8 +1446,9 @@ public class XML11EntityScanner
|
||||
fCurrentEntity.lineNumber++;
|
||||
fCurrentEntity.columnNumber = 1;
|
||||
if (fCurrentEntity.position == fCurrentEntity.count - 1) {
|
||||
invokeListeners(1);
|
||||
fCurrentEntity.ch[0] = (char)c;
|
||||
entityChanged = load(1, true, true);
|
||||
entityChanged = load(1, true, false);
|
||||
if (!entityChanged) {
|
||||
// the load change the position to be 1,
|
||||
// need to restore it when entity not changed
|
||||
|
@ -3,13 +3,14 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright 2005 The Apache Software Foundation.
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@ -19,17 +20,17 @@
|
||||
*/
|
||||
|
||||
package com.sun.org.apache.xerces.internal.impl;
|
||||
import com.sun.xml.internal.stream.dtd.nonvalidating.DTDGrammar;
|
||||
import java.io.EOFException;
|
||||
import java.io.IOException;
|
||||
|
||||
import com.sun.org.apache.xerces.internal.impl.Constants;
|
||||
import com.sun.org.apache.xerces.internal.impl.msg.XMLMessageFormatter;
|
||||
|
||||
import com.sun.org.apache.xerces.internal.impl.XMLErrorReporter;
|
||||
import com.sun.org.apache.xerces.internal.impl.XMLEntityHandler;
|
||||
import com.sun.org.apache.xerces.internal.util.SymbolTable;
|
||||
import com.sun.org.apache.xerces.internal.util.XMLAttributesImpl;
|
||||
import com.sun.org.apache.xerces.internal.util.XMLChar;
|
||||
import com.sun.org.apache.xerces.internal.util.XMLStringBuffer;
|
||||
|
||||
import com.sun.org.apache.xerces.internal.utils.XMLLimitAnalyzer;
|
||||
import com.sun.org.apache.xerces.internal.utils.XMLSecurityManager;
|
||||
import com.sun.org.apache.xerces.internal.xni.XMLDTDContentModelHandler;
|
||||
import com.sun.org.apache.xerces.internal.xni.XMLDTDHandler;
|
||||
import com.sun.org.apache.xerces.internal.xni.XMLResourceIdentifier;
|
||||
@ -41,11 +42,9 @@ import com.sun.org.apache.xerces.internal.xni.parser.XMLConfigurationException;
|
||||
import com.sun.org.apache.xerces.internal.xni.parser.XMLDTDScanner;
|
||||
import com.sun.org.apache.xerces.internal.xni.parser.XMLInputSource;
|
||||
import com.sun.org.apache.xerces.internal.xni.Augmentations;
|
||||
import com.sun.org.apache.xerces.internal.impl.XMLErrorReporter;
|
||||
import com.sun.org.apache.xerces.internal.impl.XMLEntityHandler;
|
||||
import com.sun.org.apache.xerces.internal.impl.Constants;
|
||||
import com.sun.org.apache.xerces.internal.utils.XMLLimitAnalyzer;
|
||||
import com.sun.org.apache.xerces.internal.utils.XMLSecurityManager;
|
||||
import com.sun.xml.internal.stream.dtd.nonvalidating.DTDGrammar;
|
||||
import java.io.EOFException;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* This class is responsible for scanning the declarations found
|
||||
@ -387,15 +386,25 @@ implements XMLDTDScanner, XMLComponent, XMLEntityHandler {
|
||||
*/
|
||||
@Override
|
||||
public boolean skipDTD(boolean supportDTD) throws IOException {
|
||||
if (!supportDTD) {
|
||||
fStringBuffer.clear();
|
||||
if (!fEntityScanner.scanData("]", fStringBuffer)) {
|
||||
fEntityScanner.fCurrentEntity.position--;
|
||||
}
|
||||
if (supportDTD)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
fStringBuffer.clear();
|
||||
while (fEntityScanner.scanData("]", fStringBuffer)) {
|
||||
int c = fEntityScanner.peekChar();
|
||||
if (c != -1) {
|
||||
if (XMLChar.isHighSurrogate(c)) {
|
||||
scanSurrogates(fStringBuffer);
|
||||
}
|
||||
if (isInvalidLiteral(c)) {
|
||||
reportFatalError("InvalidCharInDTD",
|
||||
new Object[] { Integer.toHexString(c) });
|
||||
fEntityScanner.scanChar();
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
fEntityScanner.fCurrentEntity.position--;
|
||||
return true;
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -3,13 +3,14 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright 2005 The Apache Software Foundation.
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@ -18,7 +19,6 @@
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
|
||||
package com.sun.org.apache.xerces.internal.impl;
|
||||
|
||||
import com.sun.xml.internal.stream.XMLBufferListener;
|
||||
|
@ -3,13 +3,14 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright 2005 The Apache Software Foundation.
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@ -20,7 +21,6 @@
|
||||
|
||||
package com.sun.org.apache.xerces.internal.impl;
|
||||
|
||||
|
||||
import com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDDescription;
|
||||
import com.sun.org.apache.xerces.internal.impl.validation.ValidationManager;
|
||||
import com.sun.org.apache.xerces.internal.util.NamespaceSupport;
|
||||
@ -1106,8 +1106,7 @@ public class XMLDocumentScannerImpl
|
||||
if (!moreToScan) {
|
||||
// end doctype declaration
|
||||
if (!fEntityScanner.skipChar(']')) {
|
||||
reportFatalError("EXPECTED_SQUARE_BRACKET_TO_CLOSE_INTERNAL_SUBSET",
|
||||
null);
|
||||
reportFatalError("DoctypedeclNotClosed", new Object[]{fDoctypeName});
|
||||
}
|
||||
fEntityScanner.skipSpaces();
|
||||
if (!fEntityScanner.skipChar('>')) {
|
||||
|
@ -1,15 +1,16 @@
|
||||
/*
|
||||
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2003, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright 2005 The Apache Software Foundation.
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@ -20,8 +21,6 @@
|
||||
|
||||
package com.sun.org.apache.xerces.internal.impl;
|
||||
|
||||
|
||||
|
||||
import com.sun.org.apache.xerces.internal.impl.io.ASCIIReader;
|
||||
import com.sun.org.apache.xerces.internal.impl.io.UCSReader;
|
||||
import com.sun.org.apache.xerces.internal.impl.io.UTF8Reader;
|
||||
@ -44,8 +43,8 @@ import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Locale;
|
||||
import java.util.Vector;
|
||||
|
||||
/**
|
||||
* Implements the entity scanner methods.
|
||||
@ -58,11 +57,10 @@ import java.util.Vector;
|
||||
*/
|
||||
public class XMLEntityScanner implements XMLLocator {
|
||||
|
||||
|
||||
protected Entity.ScannedEntity fCurrentEntity = null ;
|
||||
protected Entity.ScannedEntity fCurrentEntity = null;
|
||||
protected int fBufferSize = XMLEntityManager.DEFAULT_BUFFER_SIZE;
|
||||
|
||||
protected XMLEntityManager fEntityManager ;
|
||||
protected XMLEntityManager fEntityManager;
|
||||
|
||||
/** Security manager. */
|
||||
protected XMLSecurityManager fSecurityManager = null;
|
||||
@ -72,8 +70,9 @@ public class XMLEntityScanner implements XMLLocator {
|
||||
|
||||
/** Debug switching readers for encodings. */
|
||||
private static final boolean DEBUG_ENCODINGS = false;
|
||||
|
||||
/** Listeners which should know when load is being called */
|
||||
private Vector listeners = new Vector();
|
||||
private ArrayList<XMLBufferListener> listeners = new ArrayList<>();
|
||||
|
||||
private static final boolean [] VALID_NAMES = new boolean[127];
|
||||
|
||||
@ -140,9 +139,11 @@ public class XMLEntityScanner implements XMLLocator {
|
||||
VALID_NAMES[58]=true;
|
||||
VALID_NAMES[95]=true;
|
||||
}
|
||||
// SAPJVM: Remember, that the XML version has explicitly been set,
|
||||
|
||||
// Remember, that the XML version has explicitly been set,
|
||||
// so that XMLStreamReader.getVersion() can find that out.
|
||||
boolean xmlVersionSetExplicitly = false;
|
||||
protected boolean xmlVersionSetExplicitly = false;
|
||||
|
||||
//
|
||||
// Constructors
|
||||
//
|
||||
@ -257,7 +258,7 @@ public class XMLEntityScanner implements XMLLocator {
|
||||
* @param xmlVersion the XML version of the current entity
|
||||
*/
|
||||
public final void setXMLVersion(String xmlVersion) {
|
||||
xmlVersionSetExplicitly = true; // SAPJVM
|
||||
xmlVersionSetExplicitly = true;
|
||||
fCurrentEntity.xmlVersion = xmlVersion;
|
||||
} // setXMLVersion(String)
|
||||
|
||||
@ -546,8 +547,7 @@ public class XMLEntityScanner implements XMLLocator {
|
||||
|
||||
// scan character
|
||||
int c = fCurrentEntity.ch[fCurrentEntity.position++];
|
||||
if (c == '\n' ||
|
||||
(c == '\r' && isExternal)) {
|
||||
if (c == '\n' || (c == '\r' && isExternal)) {
|
||||
fCurrentEntity.lineNumber++;
|
||||
fCurrentEntity.columnNumber = 1;
|
||||
if (fCurrentEntity.position == fCurrentEntity.count) {
|
||||
@ -953,7 +953,7 @@ public class XMLEntityScanner implements XMLLocator {
|
||||
if (fCurrentEntity.position == fCurrentEntity.count) {
|
||||
load(0, true, true);
|
||||
} else if (fCurrentEntity.position == fCurrentEntity.count - 1) {
|
||||
invokeListeners(0);
|
||||
invokeListeners(1);
|
||||
fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1];
|
||||
load(1, false, false);
|
||||
fCurrentEntity.position = 0;
|
||||
@ -1105,7 +1105,7 @@ public class XMLEntityScanner implements XMLLocator {
|
||||
if (fCurrentEntity.position == fCurrentEntity.count) {
|
||||
load(0, true, true);
|
||||
} else if (fCurrentEntity.position == fCurrentEntity.count - 1) {
|
||||
invokeListeners(0);
|
||||
invokeListeners(1);
|
||||
fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1];
|
||||
load(1, false, false);
|
||||
fCurrentEntity.position = 0;
|
||||
@ -1256,8 +1256,8 @@ public class XMLEntityScanner implements XMLLocator {
|
||||
* <p>
|
||||
* <strong>Note:</strong> The characters are consumed.
|
||||
* <p>
|
||||
* <strong>Note:</strong> This assumes that the length of the delimiter
|
||||
* and that the delimiter contains at least one character.
|
||||
* <strong>Note:</strong> This assumes that the delimiter contains at
|
||||
* least one character.
|
||||
* <p>
|
||||
* <strong>Note:</strong> This method does not guarantee to return
|
||||
* the longest run of character data. This method may return before
|
||||
@ -1436,7 +1436,7 @@ public class XMLEntityScanner implements XMLLocator {
|
||||
} while (!done);
|
||||
return !done;
|
||||
|
||||
} // scanData(String,XMLString)
|
||||
} // scanData(String, XMLStringBuffer)
|
||||
|
||||
/**
|
||||
* Skips a character appearing immediately on the input.
|
||||
@ -1558,7 +1558,7 @@ public class XMLEntityScanner implements XMLLocator {
|
||||
fCurrentEntity.lineNumber++;
|
||||
fCurrentEntity.columnNumber = 1;
|
||||
if (fCurrentEntity.position == fCurrentEntity.count - 1) {
|
||||
invokeListeners(0);
|
||||
invokeListeners(1);
|
||||
fCurrentEntity.ch[0] = (char)c;
|
||||
entityChanged = load(1, true, false);
|
||||
if (!entityChanged){
|
||||
@ -1727,8 +1727,7 @@ public class XMLEntityScanner implements XMLLocator {
|
||||
final int length = s.length;
|
||||
//first make sure that required capacity is avaible
|
||||
if(arrangeCapacity(length, false)){
|
||||
int beforeSkip = fCurrentEntity.position ;
|
||||
int afterSkip = fCurrentEntity.position + length ;
|
||||
int beforeSkip = fCurrentEntity.position;
|
||||
|
||||
if(DEBUG_SKIP_STRING){
|
||||
System.out.println("skipString,length = " + new String(s) + "," + length);
|
||||
@ -2107,8 +2106,9 @@ public class XMLEntityScanner implements XMLLocator {
|
||||
* is being changed.
|
||||
*/
|
||||
public void registerListener(XMLBufferListener listener) {
|
||||
if(!listeners.contains(listener))
|
||||
if (!listeners.contains(listener)) {
|
||||
listeners.add(listener);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -2116,9 +2116,8 @@ public class XMLEntityScanner implements XMLLocator {
|
||||
* @param loadPos Starting position from which new data is being loaded into scanner buffer.
|
||||
*/
|
||||
public void invokeListeners(int loadPos){
|
||||
for(int i=0;i<listeners.size();i++){
|
||||
XMLBufferListener listener =(XMLBufferListener) listeners.get(i);
|
||||
listener.refresh(loadPos);
|
||||
for (int i=0; i<listeners.size(); i++) {
|
||||
listeners.get(i).refresh(loadPos);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3,13 +3,14 @@
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright 2005 The Apache Software Foundation.
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@ -20,7 +21,6 @@
|
||||
|
||||
package com.sun.org.apache.xerces.internal.impl;
|
||||
|
||||
|
||||
import com.sun.org.apache.xerces.internal.util.Status;
|
||||
import com.sun.xml.internal.stream.XMLEntityStorage;
|
||||
import java.io.IOException;
|
||||
|
@ -145,6 +145,7 @@
|
||||
MSG_SPACE_REQUIRED_BEFORE_ROOT_ELEMENT_TYPE_IN_DOCTYPEDECL = White space is required after \"<!DOCTYPE\" in the document type declaration.
|
||||
MSG_ROOT_ELEMENT_TYPE_REQUIRED = The root element type must appear after \"<!DOCTYPE\" in the document type declaration.
|
||||
DoctypedeclUnterminated = The document type declaration for root element type \"{0}\" must end with ''>''.
|
||||
DoctypedeclNotClosed = The document type declaration for root element type \"{0}\" must be closed with '']''.
|
||||
PEReferenceWithinMarkup = The parameter entity reference \"%{0};\" cannot occur within markup in the internal subset of the DTD.
|
||||
MSG_MARKUP_NOT_RECOGNIZED_IN_DTD = The markup declarations contained or pointed to by the document type declaration must be well-formed.
|
||||
# 2.10 White Space Handling
|
||||
|
@ -145,6 +145,7 @@
|
||||
MSG_SPACE_REQUIRED_BEFORE_ROOT_ELEMENT_TYPE_IN_DOCTYPEDECL = Leerstelle nach "<!DOCTYPE" in der Dokumenttypdeklaration erforderlich.
|
||||
MSG_ROOT_ELEMENT_TYPE_REQUIRED = Root-Elementtyp muss nach "<!DOCTYPE" in der Dokumenttypdeklaration enthalten sein.
|
||||
DoctypedeclUnterminated = Dokumenttypdeklaration f\u00FCr Root-Elementtyp "{0}" muss mit ">" enden.
|
||||
DoctypedeclNotClosed = Dokumenttypdeklaration f\u00FCr Root-Elementtyp "{0}" muss mit "]" abgeschlossen werden.
|
||||
PEReferenceWithinMarkup = Parameterentit\u00E4tsreferenz "%{0};" darf nicht in Markup in der internen Teilmenge der DTD vorkommen.
|
||||
MSG_MARKUP_NOT_RECOGNIZED_IN_DTD = Die Markup-Deklarationen, die in der Dokumenttypdeklaration enthalten sind bzw. auf die von der Dokumenttypdeklaration verwiesen wird, m\u00FCssen ordnungsgem\u00E4\u00DF formatiert sein.
|
||||
# 2.10 White Space Handling
|
||||
|
@ -145,6 +145,7 @@
|
||||
MSG_SPACE_REQUIRED_BEFORE_ROOT_ELEMENT_TYPE_IN_DOCTYPEDECL = Es necesario un espacio en blanco despu\u00E9s de "<!DOCTYPE" en la declaraci\u00F3n de tipo de documento.
|
||||
MSG_ROOT_ELEMENT_TYPE_REQUIRED = El tipo de elemento ra\u00EDz debe aparecer despu\u00E9s de "<!DOCTYPE" en la declaraci\u00F3n de tipo de documento.
|
||||
DoctypedeclUnterminated = La declaraci\u00F3n de tipo de documento para el tipo de elemento ra\u00EDz "{0}" debe finalizar en ''>''.
|
||||
DoctypedeclNotClosed = La declaraci\u00F3n de tipo de documento para el tipo de elemento ra\u00EDz "{0}" debe cerrar en '']''.
|
||||
PEReferenceWithinMarkup = La referencia de entidad del par\u00E1metro "%{0};" no puede producirse en el marcador en el subconjunto interno del DTD.
|
||||
MSG_MARKUP_NOT_RECOGNIZED_IN_DTD = Las declaraciones de marcador que se incluyen o a las que apunta la declaraci\u00F3n de tipo de documento deben tener el formato correcto.
|
||||
# 2.10 White Space Handling
|
||||
|
@ -145,6 +145,7 @@
|
||||
MSG_SPACE_REQUIRED_BEFORE_ROOT_ELEMENT_TYPE_IN_DOCTYPEDECL = Un espace est obligatoire apr\u00E8s "<!DOCTYPE" dans la d\u00E9claration de type de document.
|
||||
MSG_ROOT_ELEMENT_TYPE_REQUIRED = Le type d'\u00E9l\u00E9ment racine doit figurer apr\u00E8s "<!DOCTYPE" dans la d\u00E9claration de type de document.
|
||||
DoctypedeclUnterminated = La d\u00E9claration de type de document pour le type d''\u00E9l\u00E9ment racine "{0}" doit se terminer par ''>''.
|
||||
DoctypedeclNotClosed = La d\u00E9claration de type de document pour le type d''\u00E9l\u00E9ment racine "{0}" doit se conclure par '']''.
|
||||
PEReferenceWithinMarkup = La r\u00E9f\u00E9rence d''entit\u00E9 de param\u00E8tre "%{0};" ne peut pas survenir dans le balisage du sous-ensemble interne de la DTD.
|
||||
MSG_MARKUP_NOT_RECOGNIZED_IN_DTD = Les d\u00E9clarations de balisage contenues dans la d\u00E9claration de type de document ou sur lesquelles pointe cette derni\u00E8re doivent avoir un format correct.
|
||||
# 2.10 White Space Handling
|
||||
|
@ -145,6 +145,7 @@
|
||||
MSG_SPACE_REQUIRED_BEFORE_ROOT_ELEMENT_TYPE_IN_DOCTYPEDECL = \u00C8 richiesto uno spazio dopo "<!DOCTYPE" nella dichiarazione del tipo di documento.
|
||||
MSG_ROOT_ELEMENT_TYPE_REQUIRED = Il tipo di elemento radice deve comparire dopo "<!DOCTYPE" nella dichiarazione del tipo di documento.
|
||||
DoctypedeclUnterminated = La dichiarazione del tipo di documento per il tipo di elemento radice "{0}" deve terminare con ''>''.
|
||||
DoctypedeclNotClosed = La dichiarazione del tipo di documento per il tipo di elemento radice "{0}" deve chiudere con '']''.
|
||||
PEReferenceWithinMarkup = Il riferimento di entit\u00E0 di parametro "%{0};" non pu\u00F2 essere presente nel markup del set secondario interno del DTD.
|
||||
MSG_MARKUP_NOT_RECOGNIZED_IN_DTD = Le dichiarazioni di markup contenute o indicate dalla dichiarazione del tipo di documento devono avere un formato corretto.
|
||||
# 2.10 White Space Handling
|
||||
|
@ -1,15 +1,16 @@
|
||||
/*
|
||||
* reserved comment block
|
||||
* DO NOT REMOVE OR ALTER!
|
||||
* Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Copyright 2004,2005 The Apache Software Foundation.
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@ -17,17 +18,16 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.sun.org.apache.xerces.internal.util;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.io.Reader;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
import com.sun.org.apache.xerces.internal.xni.XMLResourceIdentifier;
|
||||
import com.sun.org.apache.xerces.internal.xni.parser.XMLInputSource;
|
||||
import java.io.InputStream;
|
||||
import java.io.Reader;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* This class represents an input source for an XML resource
|
||||
|
@ -4,5 +4,6 @@ TestNG.dirs = .
|
||||
lib.dirs = /javax/xml/jaxp/libs
|
||||
|
||||
# Declare module dependency
|
||||
modules=java.xml/com.sun.org.apache.xerces.internal.jaxp \
|
||||
modules=java.xml/com.sun.org.apache.xerces.internal.impl \
|
||||
java.xml/com.sun.org.apache.xerces.internal.jaxp \
|
||||
java.xml/com.sun.org.apache.xml.internal.serialize
|
||||
|
@ -28,7 +28,6 @@ import java.io.File;
|
||||
import javax.xml.stream.XMLEventReader;
|
||||
import javax.xml.stream.XMLInputFactory;
|
||||
import javax.xml.stream.XMLOutputFactory;
|
||||
import javax.xml.stream.events.XMLEvent;
|
||||
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.Test;
|
||||
@ -74,7 +73,7 @@ public class Bug6668115Test {
|
||||
er.nextTag();
|
||||
er.nextTag();
|
||||
|
||||
XMLEvent event = er.peek();
|
||||
er.peek();
|
||||
System.out.println(er.getElementText());
|
||||
er.nextTag();
|
||||
System.out.println(er.getElementText());
|
||||
|
@ -0,0 +1,90 @@
|
||||
/*
|
||||
* 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 stream.XMLEventReaderTest;
|
||||
|
||||
import java.io.StringReader;
|
||||
|
||||
import javax.xml.stream.XMLEventReader;
|
||||
import javax.xml.stream.XMLInputFactory;
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
import javax.xml.stream.events.XMLEvent;
|
||||
|
||||
import org.testng.Assert;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.sun.org.apache.xerces.internal.impl.XMLEntityManager;
|
||||
|
||||
/*
|
||||
* @bug 8153781
|
||||
* @summary Test if method skipDTD of class XMLDTDScannerImpl will correctly skip the DTD section,
|
||||
* even if a call to XMLEntityScanner.scanData for skipping to the closing ']' returns true.
|
||||
*/
|
||||
public class Bug8153781 {
|
||||
public static int DOCTYPE_SECTION_LENGTH = XMLEntityManager.DEFAULT_BUFFER_SIZE * 2;
|
||||
public static int DOCUMENT_LENGTH = DOCTYPE_SECTION_LENGTH + 4096;
|
||||
|
||||
public String createXMLDocument(int doctypeoffset) {
|
||||
StringBuilder xmlcontentbuilder = new StringBuilder(DOCUMENT_LENGTH);
|
||||
xmlcontentbuilder.append("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\r\n");
|
||||
xmlcontentbuilder.append("<!DOCTYPE dummy [\r\n");
|
||||
xmlcontentbuilder.append(" <!ELEMENT dummy EMPTY>\r\n");
|
||||
xmlcontentbuilder.append(" <!--\r\n");
|
||||
int doctypelines = DOCTYPE_SECTION_LENGTH / 3;
|
||||
for (int i = 0; i < doctypeoffset; i++)
|
||||
xmlcontentbuilder.append('a');
|
||||
for (int i = 0; i < doctypelines; i++)
|
||||
xmlcontentbuilder.append("a\r\n");
|
||||
xmlcontentbuilder.append(" -->\r\n");
|
||||
xmlcontentbuilder.append(" ]\r\n");
|
||||
xmlcontentbuilder.append(">\r\n");
|
||||
xmlcontentbuilder.append("<dummy>\r\n");
|
||||
xmlcontentbuilder.append("</dummy>\r\n");
|
||||
System.out.println("Document length:" + xmlcontentbuilder.length());
|
||||
return xmlcontentbuilder.toString();
|
||||
}
|
||||
|
||||
public void runReader(XMLInputFactory factory, int offset) throws XMLStreamException {
|
||||
StringReader stringReader = new StringReader(createXMLDocument(offset));
|
||||
XMLEventReader reader = factory.createXMLEventReader(stringReader);
|
||||
|
||||
while (reader.hasNext()) {
|
||||
XMLEvent event = reader.nextEvent();
|
||||
System.out.println("Event Type: " + event.getEventType());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
try {
|
||||
XMLInputFactory factory = XMLInputFactory.newInstance();
|
||||
factory.setProperty(XMLInputFactory.SUPPORT_DTD, false);
|
||||
for (int i = 0; i < 3; i++) {
|
||||
runReader(factory, i);
|
||||
}
|
||||
} catch (XMLStreamException xe) {
|
||||
xe.printStackTrace();
|
||||
Assert.fail(xe.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user