Mercurial > hg > shenandoah-preopenjdk-archive > openjdk8 > jaxp
changeset 803:3eaaa67e886e
8059327: XML parser returns corrupt attribute value
Reviewed-by: lancea
author | aefimov |
---|---|
date | Wed, 12 Nov 2014 13:02:14 +0300 |
parents | 0bb8f4009f26 |
children | ed46c05af257 |
files | src/com/sun/org/apache/xerces/internal/impl/XML11EntityScanner.java src/com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java |
diffstat | 2 files changed, 42 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/src/com/sun/org/apache/xerces/internal/impl/XML11EntityScanner.java Tue Nov 11 10:39:47 2014 -0800 +++ b/src/com/sun/org/apache/xerces/internal/impl/XML11EntityScanner.java Wed Nov 12 13:02:14 2014 +0300 @@ -147,8 +147,9 @@ 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++]; @@ -306,9 +307,10 @@ 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; @@ -317,9 +319,10 @@ } 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; @@ -332,10 +335,11 @@ 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; @@ -464,9 +468,10 @@ 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; @@ -475,9 +480,10 @@ } 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; @@ -490,10 +496,11 @@ 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; @@ -628,9 +635,10 @@ 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); @@ -640,9 +648,10 @@ } 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; @@ -655,10 +664,11 @@ 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); @@ -835,8 +845,9 @@ 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; } @@ -976,8 +987,9 @@ 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; } @@ -1346,8 +1358,9 @@ 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) { @@ -1408,8 +1421,9 @@ 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
--- a/src/com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java Tue Nov 11 10:39:47 2014 -0800 +++ b/src/com/sun/org/apache/xerces/internal/impl/XMLEntityScanner.java Wed Nov 12 13:02:14 2014 +0300 @@ -538,8 +538,9 @@ 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 @@ 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 @@ 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 @@ 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 @@ 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 @@ } 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 @@ 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