in src/log4net/Util/Transform.cs [49:99]
public static void WriteEscapedXmlString(XmlWriter writer, string textData, string invalidCharReplacement)
{
writer.EnsureNotNull();
string stringData = MaskXmlInvalidCharacters(textData, invalidCharReplacement);
// Write either escaped text or CDATA sections
int weightCData = 12 * (1 + CountSubstrings(stringData, CdataEnd));
int weightStringEscapes = 3 * (CountSubstrings(stringData, "<") + CountSubstrings(stringData, ">")) + 4 * CountSubstrings(stringData, "&");
if (weightStringEscapes <= weightCData)
{
// Write string using string escapes
writer.WriteString(stringData);
}
else
{
// Write string using CDATA section
int end = stringData.IndexOf(CdataEnd);
if (end < 0)
{
writer.WriteCData(stringData);
}
else
{
int start = 0;
while (end > -1)
{
writer.WriteCData(stringData.Substring(start, end - start));
if (end == stringData.Length - 3)
{
start = stringData.Length;
writer.WriteString(CdataEnd);
break;
}
else
{
writer.WriteString(CdataUnescapableToken);
start = end + 2;
end = stringData.IndexOf(CdataEnd, start);
}
}
if (start < stringData.Length)
{
writer.WriteCData(stringData.Substring(start));
}
}
}
}