mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2024-11-24 23:32:05 +01:00
Delete XML whitespace before feeding the Base64 decoder
This commit is contained in:
parent
1bc8a22b28
commit
d7b7abc7eb
2 changed files with 12 additions and 2 deletions
|
@ -543,9 +543,15 @@ public class StringUtils {
|
||||||
return cs.toString();
|
return cs.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final Pattern XMLWHITESPACE = Pattern.compile("[\t\n\r ]");
|
/**
|
||||||
|
* Defined by XML 1.0 § 2.3 as:
|
||||||
|
* S ::= (#x20 | #x9 | #xD | #xA)+
|
||||||
|
*
|
||||||
|
* @see <a href="https://www.w3.org/TR/xml/#sec-white-space">XML 1.0 § 2.3</a>
|
||||||
|
*/
|
||||||
|
private static final Pattern XML_WHITESPACE = Pattern.compile("[\t\n\r ]");
|
||||||
|
|
||||||
public static String deleteXmlWhitespace(String string) {
|
public static String deleteXmlWhitespace(String string) {
|
||||||
return XMLWHITESPACE.matcher(string).replaceAll("");
|
return XML_WHITESPACE.matcher(string).replaceAll("");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,7 @@ package org.jivesoftware.smack.util.stringencoder;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
import org.jivesoftware.smack.util.Objects;
|
import org.jivesoftware.smack.util.Objects;
|
||||||
|
import org.jivesoftware.smack.util.StringUtils;
|
||||||
|
|
||||||
public class Base64 {
|
public class Base64 {
|
||||||
|
|
||||||
|
@ -57,6 +58,9 @@ public class Base64 {
|
||||||
// TODO: We really should not mask the IllegalArgumentException. But some unit test depend on this behavior, like
|
// TODO: We really should not mask the IllegalArgumentException. But some unit test depend on this behavior, like
|
||||||
// ibb.packet.DataPacketExtension.shouldReturnNullIfDataIsInvalid().
|
// ibb.packet.DataPacketExtension.shouldReturnNullIfDataIsInvalid().
|
||||||
public static final byte[] decode(String string) {
|
public static final byte[] decode(String string) {
|
||||||
|
// xs:base64Binary may include XML whitespace which we need to delete before feeding the string into the Base64
|
||||||
|
// decoder. See also XML Schema Part 2: Datatypes Second Edition § 3.2.16.
|
||||||
|
string = StringUtils.deleteXmlWhitespace(string);
|
||||||
try {
|
try {
|
||||||
return base64encoder.decode(string);
|
return base64encoder.decode(string);
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
|
|
Loading…
Reference in a new issue