diff --git a/src/main/java/org/apache/commons/io/input/XmlStreamReader.java b/src/main/java/org/apache/commons/io/input/XmlStreamReader.java index 66c8d9b6e8c..a38ef807a6a 100644 --- a/src/main/java/org/apache/commons/io/input/XmlStreamReader.java +++ b/src/main/java/org/apache/commons/io/input/XmlStreamReader.java @@ -201,8 +201,17 @@ public Builder setLenient(final boolean lenient) { /** * Pattern capturing the encoding of the "xml" processing instruction. + *

+ * See also the XML specification. + *

*/ - public static final Pattern ENCODING_PATTERN = Pattern.compile("^<\\?xml.*encoding[\\s]*=[\\s]*((?:\".[^\"]*\")|(?:'.[^']*'))", Pattern.MULTILINE); + public static final Pattern ENCODING_PATTERN = Pattern.compile( + // @formatter:off + "^<\\?xml\\s+" + + "version\\s*=\\s*(?:(?:\"1\\.[0-9]+\")|(?:'1.[0-9]+'))\\s+" + + "encoding\\s*=\\s*((?:\"[A-Za-z]([A-Za-z0-9\\._]|-)*\")|(?:'[A-Za-z]([A-Za-z0-9\\\\._]|-)*'))", + Pattern.MULTILINE); + // @formatter:on private static final String RAW_EX_1 = "Illegal encoding, BOM [{0}] XML guess [{1}] XML prolog [{2}] encoding mismatch";