8059327: XML parser returns corrupt attribute value
Reviewed-by: lancea
This commit is contained in:
parent
e9d151f105
commit
23a78f8c2f
jaxp/src/java.xml/share/classes/com/sun/org/apache/xerces/internal/impl
@ -146,8 +146,9 @@ public class XML11EntityScanner
|
||||
fCurrentEntity.lineNumber++;
|
||||
fCurrentEntity.columnNumber = 1;
|
||||
if (fCurrentEntity.position == fCurrentEntity.count) {
|
||||
invokeListeners(1);
|
||||
fCurrentEntity.ch[0] = (char)c;
|
||||
load(1, false, true);
|
||||
load(1, false, false);
|
||||
}
|
||||
if (c == '\r' && external) {
|
||||
int cc = fCurrentEntity.ch[fCurrentEntity.position++];
|
||||
@ -305,9 +306,10 @@ public class XML11EntityScanner
|
||||
|
||||
if (XML11Char.isXML11NameStart(ch)) {
|
||||
if (++fCurrentEntity.position == fCurrentEntity.count) {
|
||||
invokeListeners(1);
|
||||
fCurrentEntity.ch[0] = ch;
|
||||
offset = 0;
|
||||
if (load(1, false, true)) {
|
||||
if (load(1, false, false)) {
|
||||
fCurrentEntity.columnNumber++;
|
||||
String symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 1);
|
||||
return symbol;
|
||||
@ -316,9 +318,10 @@ public class XML11EntityScanner
|
||||
}
|
||||
else if (XML11Char.isXML11NameHighSurrogate(ch)) {
|
||||
if (++fCurrentEntity.position == fCurrentEntity.count) {
|
||||
invokeListeners(1);
|
||||
fCurrentEntity.ch[0] = ch;
|
||||
offset = 0;
|
||||
if (load(1, false, true)) {
|
||||
if (load(1, false, false)) {
|
||||
--fCurrentEntity.position;
|
||||
--fCurrentEntity.startPosition;
|
||||
return null;
|
||||
@ -331,10 +334,11 @@ public class XML11EntityScanner
|
||||
return null;
|
||||
}
|
||||
if (++fCurrentEntity.position == fCurrentEntity.count) {
|
||||
invokeListeners(2);
|
||||
fCurrentEntity.ch[0] = ch;
|
||||
fCurrentEntity.ch[1] = ch2;
|
||||
offset = 0;
|
||||
if (load(2, false, true)) {
|
||||
if (load(2, false, false)) {
|
||||
fCurrentEntity.columnNumber += 2;
|
||||
String symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 2);
|
||||
return symbol;
|
||||
@ -463,9 +467,10 @@ public class XML11EntityScanner
|
||||
|
||||
if (XML11Char.isXML11NCNameStart(ch)) {
|
||||
if (++fCurrentEntity.position == fCurrentEntity.count) {
|
||||
invokeListeners(1);
|
||||
fCurrentEntity.ch[0] = ch;
|
||||
offset = 0;
|
||||
if (load(1, false, true)) {
|
||||
if (load(1, false, false)) {
|
||||
fCurrentEntity.columnNumber++;
|
||||
String symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 1);
|
||||
return symbol;
|
||||
@ -474,9 +479,10 @@ public class XML11EntityScanner
|
||||
}
|
||||
else if (XML11Char.isXML11NameHighSurrogate(ch)) {
|
||||
if (++fCurrentEntity.position == fCurrentEntity.count) {
|
||||
invokeListeners(1);
|
||||
fCurrentEntity.ch[0] = ch;
|
||||
offset = 0;
|
||||
if (load(1, false, true)) {
|
||||
if (load(1, false, false)) {
|
||||
--fCurrentEntity.position;
|
||||
--fCurrentEntity.startPosition;
|
||||
return null;
|
||||
@ -489,10 +495,11 @@ public class XML11EntityScanner
|
||||
return null;
|
||||
}
|
||||
if (++fCurrentEntity.position == fCurrentEntity.count) {
|
||||
invokeListeners(2);
|
||||
fCurrentEntity.ch[0] = ch;
|
||||
fCurrentEntity.ch[1] = ch2;
|
||||
offset = 0;
|
||||
if (load(2, false, true)) {
|
||||
if (load(2, false, false)) {
|
||||
fCurrentEntity.columnNumber += 2;
|
||||
String symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 2);
|
||||
return symbol;
|
||||
@ -627,9 +634,10 @@ public class XML11EntityScanner
|
||||
|
||||
if (XML11Char.isXML11NCNameStart(ch)) {
|
||||
if (++fCurrentEntity.position == fCurrentEntity.count) {
|
||||
invokeListeners(1);
|
||||
fCurrentEntity.ch[0] = ch;
|
||||
offset = 0;
|
||||
if (load(1, false, true)) {
|
||||
if (load(1, false, false)) {
|
||||
fCurrentEntity.columnNumber++;
|
||||
String name = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 1);
|
||||
qname.setValues(null, name, name, null);
|
||||
@ -639,9 +647,10 @@ public class XML11EntityScanner
|
||||
}
|
||||
else if (XML11Char.isXML11NameHighSurrogate(ch)) {
|
||||
if (++fCurrentEntity.position == fCurrentEntity.count) {
|
||||
invokeListeners(1);
|
||||
fCurrentEntity.ch[0] = ch;
|
||||
offset = 0;
|
||||
if (load(1, false, true)) {
|
||||
if (load(1, false, false)) {
|
||||
--fCurrentEntity.startPosition;
|
||||
--fCurrentEntity.position;
|
||||
return false;
|
||||
@ -654,10 +663,11 @@ public class XML11EntityScanner
|
||||
return false;
|
||||
}
|
||||
if (++fCurrentEntity.position == fCurrentEntity.count) {
|
||||
invokeListeners(2);
|
||||
fCurrentEntity.ch[0] = ch;
|
||||
fCurrentEntity.ch[1] = ch2;
|
||||
offset = 0;
|
||||
if (load(2, false, true)) {
|
||||
if (load(2, false, false)) {
|
||||
fCurrentEntity.columnNumber += 2;
|
||||
String name = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 2);
|
||||
qname.setValues(null, name, name, null);
|
||||
@ -834,8 +844,9 @@ public class XML11EntityScanner
|
||||
load(0, true, true);
|
||||
}
|
||||
else if (fCurrentEntity.position == fCurrentEntity.count - 1) {
|
||||
invokeListeners(0);
|
||||
fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1];
|
||||
load(1, false, true);
|
||||
load(1, false, false);
|
||||
fCurrentEntity.position = 0;
|
||||
fCurrentEntity.startPosition = 0;
|
||||
}
|
||||
@ -975,8 +986,9 @@ public class XML11EntityScanner
|
||||
load(0, true, true);
|
||||
}
|
||||
else if (fCurrentEntity.position == fCurrentEntity.count - 1) {
|
||||
invokeListeners(0);
|
||||
fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1];
|
||||
load(1, false, true);
|
||||
load(1, false, false);
|
||||
fCurrentEntity.startPosition = 0;
|
||||
fCurrentEntity.position = 0;
|
||||
}
|
||||
@ -1345,8 +1357,9 @@ public class XML11EntityScanner
|
||||
else if (c == '\n' && (cc == '\r' ) && fCurrentEntity.isExternal()) {
|
||||
// handle newlines
|
||||
if (fCurrentEntity.position == fCurrentEntity.count) {
|
||||
invokeListeners(1);
|
||||
fCurrentEntity.ch[0] = (char)cc;
|
||||
load(1, false, true);
|
||||
load(1, false, false);
|
||||
}
|
||||
int ccc = fCurrentEntity.ch[++fCurrentEntity.position];
|
||||
if (ccc == '\n' || ccc == 0x85) {
|
||||
@ -1407,8 +1420,9 @@ public class XML11EntityScanner
|
||||
fCurrentEntity.lineNumber++;
|
||||
fCurrentEntity.columnNumber = 1;
|
||||
if (fCurrentEntity.position == fCurrentEntity.count - 1) {
|
||||
invokeListeners(0);
|
||||
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
|
||||
|
@ -538,8 +538,9 @@ public class XMLEntityScanner implements XMLLocator {
|
||||
fCurrentEntity.lineNumber++;
|
||||
fCurrentEntity.columnNumber = 1;
|
||||
if (fCurrentEntity.position == fCurrentEntity.count) {
|
||||
invokeListeners(1);
|
||||
fCurrentEntity.ch[0] = (char)c;
|
||||
load(1, false, true);
|
||||
load(1, false, false);
|
||||
}
|
||||
if (c == '\r' && isExternal) {
|
||||
if (fCurrentEntity.ch[fCurrentEntity.position++] != '\n') {
|
||||
@ -670,9 +671,10 @@ public class XMLEntityScanner implements XMLLocator {
|
||||
int offset = fCurrentEntity.position;
|
||||
if (XMLChar.isNameStart(fCurrentEntity.ch[offset])) {
|
||||
if (++fCurrentEntity.position == fCurrentEntity.count) {
|
||||
invokeListeners(1);
|
||||
fCurrentEntity.ch[0] = fCurrentEntity.ch[offset];
|
||||
offset = 0;
|
||||
if (load(1, false, true)) {
|
||||
if (load(1, false, false)) {
|
||||
fCurrentEntity.columnNumber++;
|
||||
String symbol = fSymbolTable.addSymbol(fCurrentEntity.ch, 0, 1);
|
||||
|
||||
@ -776,10 +778,11 @@ public class XMLEntityScanner implements XMLLocator {
|
||||
|
||||
if (XMLChar.isNameStart(fCurrentEntity.ch[offset])) {
|
||||
if (++fCurrentEntity.position == fCurrentEntity.count) {
|
||||
invokeListeners(1);
|
||||
fCurrentEntity.ch[0] = fCurrentEntity.ch[offset];
|
||||
offset = 0;
|
||||
|
||||
if (load(1, false, true)) {
|
||||
if (load(1, false, false)) {
|
||||
fCurrentEntity.columnNumber++;
|
||||
//adding into symbol table.
|
||||
//XXX We are trying to add single character in SymbolTable??????
|
||||
@ -906,8 +909,9 @@ public class XMLEntityScanner implements XMLLocator {
|
||||
if (fCurrentEntity.position == fCurrentEntity.count) {
|
||||
load(0, true, true);
|
||||
} else if (fCurrentEntity.position == fCurrentEntity.count - 1) {
|
||||
invokeListeners(0);
|
||||
fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1];
|
||||
load(1, false, true);
|
||||
load(1, false, false);
|
||||
fCurrentEntity.position = 0;
|
||||
}
|
||||
|
||||
@ -1054,8 +1058,9 @@ public class XMLEntityScanner implements XMLLocator {
|
||||
if (fCurrentEntity.position == fCurrentEntity.count) {
|
||||
load(0, true, true);
|
||||
} else if (fCurrentEntity.position == fCurrentEntity.count - 1) {
|
||||
invokeListeners(0);
|
||||
fCurrentEntity.ch[0] = fCurrentEntity.ch[fCurrentEntity.count - 1];
|
||||
load(1, false, true);
|
||||
load(1, false, false);
|
||||
fCurrentEntity.position = 0;
|
||||
}
|
||||
|
||||
@ -1427,8 +1432,9 @@ public class XMLEntityScanner implements XMLLocator {
|
||||
} else if (c == '\n' && cc == '\r' && isExternal) {
|
||||
// handle newlines
|
||||
if (fCurrentEntity.position == fCurrentEntity.count) {
|
||||
invokeListeners(1);
|
||||
fCurrentEntity.ch[0] = (char)cc;
|
||||
load(1, false, true);
|
||||
load(1, false, false);
|
||||
}
|
||||
fCurrentEntity.position++;
|
||||
if (fCurrentEntity.ch[fCurrentEntity.position] == '\n') {
|
||||
@ -1502,8 +1508,9 @@ public class XMLEntityScanner implements XMLLocator {
|
||||
fCurrentEntity.lineNumber++;
|
||||
fCurrentEntity.columnNumber = 1;
|
||||
if (fCurrentEntity.position == fCurrentEntity.count - 1) {
|
||||
invokeListeners(0);
|
||||
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
|
||||
|
Loading…
x
Reference in New Issue
Block a user