File xerces-j2-CVE-2022-23437.patch of Package xerces-j2.22830
Index: xerces-2_11_0/src/org/apache/xerces/impl/XML11EntityScanner.java
===================================================================
--- xerces-2_11_0.orig/src/org/apache/xerces/impl/XML11EntityScanner.java
+++ xerces-2_11_0/src/org/apache/xerces/impl/XML11EntityScanner.java
@@ -108,9 +108,11 @@ public class XML11EntityScanner
load(1, false);
}
if (c == '\r' && external) {
- int cc = fCurrentEntity.ch[fCurrentEntity.position++];
- if (cc != '\n' && cc != 0x85) {
- fCurrentEntity.position--;
+ if (fCurrentEntity.position < fCurrentEntity.count) {
+ int cc = fCurrentEntity.ch[fCurrentEntity.position++];
+ if (cc != '\n' && cc != 0x85) {
+ fCurrentEntity.position--;
+ }
}
}
c = '\n';
@@ -1004,7 +1006,7 @@ public class XML11EntityScanner
c = fCurrentEntity.ch[fCurrentEntity.position++];
// In internal entities control characters are allowed to appear unescaped.
if ((c == quote && !fCurrentEntity.literal)
- || c == '%' || !XML11Char.isXML11InternalEntityContent(c)) {
+ || c == '%' || !(XML11Char.isXML11InternalEntityContent(c) || c == '\r' )) {
fCurrentEntity.position--;
break;
}
Index: xerces-2_11_0/src/org/apache/xerces/impl/XMLEntityScanner.java
===================================================================
--- xerces-2_11_0.orig/src/org/apache/xerces/impl/XMLEntityScanner.java
+++ xerces-2_11_0/src/org/apache/xerces/impl/XMLEntityScanner.java
@@ -257,8 +257,10 @@ public class XMLEntityScanner implements
load(1, false);
}
if (c == '\r' && external) {
- if (fCurrentEntity.ch[fCurrentEntity.position++] != '\n') {
- fCurrentEntity.position--;
+ if (fCurrentEntity.position < fCurrentEntity.count) {
+ if (fCurrentEntity.ch[fCurrentEntity.position++] != '\n') {
+ fCurrentEntity.position--;
+ }
}
c = '\n';
}
@@ -916,7 +918,7 @@ public class XMLEntityScanner implements
c = fCurrentEntity.ch[fCurrentEntity.position++];
if ((c == quote &&
(!fCurrentEntity.literal || external))
- || c == '%' || !XMLChar.isContent(c)) {
+ || c == '%' || !(XMLChar.isContent(c) || c == '\r' && !external)) {
fCurrentEntity.position--;
break;
}