in log4j-api/src/main/java/org/apache/logging/log4j/util/StringBuilders.java [284:348]
public static void escapeXml(final StringBuilder toAppendTo, final int start) {
int escapeCount = 0;
for (int i = start; i < toAppendTo.length(); i++) {
final char c = toAppendTo.charAt(i);
switch (c) {
case '&':
escapeCount += 4;
break;
case '<':
case '>':
escapeCount += 3;
break;
case '"':
case '\'':
escapeCount += 5;
}
}
final int lastChar = toAppendTo.length() - 1;
toAppendTo.setLength(toAppendTo.length() + escapeCount);
int lastPos = toAppendTo.length() - 1;
for (int i = lastChar; lastPos > i; i--) {
final char c = toAppendTo.charAt(i);
switch (c) {
case '&':
toAppendTo.setCharAt(lastPos--, ';');
toAppendTo.setCharAt(lastPos--, 'p');
toAppendTo.setCharAt(lastPos--, 'm');
toAppendTo.setCharAt(lastPos--, 'a');
toAppendTo.setCharAt(lastPos--, '&');
break;
case '<':
toAppendTo.setCharAt(lastPos--, ';');
toAppendTo.setCharAt(lastPos--, 't');
toAppendTo.setCharAt(lastPos--, 'l');
toAppendTo.setCharAt(lastPos--, '&');
break;
case '>':
toAppendTo.setCharAt(lastPos--, ';');
toAppendTo.setCharAt(lastPos--, 't');
toAppendTo.setCharAt(lastPos--, 'g');
toAppendTo.setCharAt(lastPos--, '&');
break;
case '"':
toAppendTo.setCharAt(lastPos--, ';');
toAppendTo.setCharAt(lastPos--, 't');
toAppendTo.setCharAt(lastPos--, 'o');
toAppendTo.setCharAt(lastPos--, 'u');
toAppendTo.setCharAt(lastPos--, 'q');
toAppendTo.setCharAt(lastPos--, '&');
break;
case '\'':
toAppendTo.setCharAt(lastPos--, ';');
toAppendTo.setCharAt(lastPos--, 's');
toAppendTo.setCharAt(lastPos--, 'o');
toAppendTo.setCharAt(lastPos--, 'p');
toAppendTo.setCharAt(lastPos--, 'a');
toAppendTo.setCharAt(lastPos--, '&');
break;
default:
toAppendTo.setCharAt(lastPos--, c);
}
}
}