|
|
@@ -283,6 +283,35 @@ void av_bprint_escape(AVBPrint *dstbuf, const char *src, const char *special_cha |
|
|
|
av_bprint_chars(dstbuf, '\'', 1); |
|
|
|
break; |
|
|
|
|
|
|
|
case AV_ESCAPE_MODE_XML: |
|
|
|
/* escape XML non-markup character data as per 2.4 by default: */ |
|
|
|
/* [^<&]* - ([^<&]* ']]>' [^<&]*) */ |
|
|
|
|
|
|
|
/* additionally, given one of the AV_ESCAPE_FLAG_XML_* flags, */ |
|
|
|
/* escape those specific characters as required. */ |
|
|
|
for (; *src; src++) { |
|
|
|
switch (*src) { |
|
|
|
case '&' : av_bprintf(dstbuf, "%s", "&"); break; |
|
|
|
case '<' : av_bprintf(dstbuf, "%s", "<"); break; |
|
|
|
case '>' : av_bprintf(dstbuf, "%s", ">"); break; |
|
|
|
case '\'': |
|
|
|
if (!(flags & AV_ESCAPE_FLAG_XML_SINGLE_QUOTES)) |
|
|
|
goto XML_DEFAULT_HANDLING; |
|
|
|
|
|
|
|
av_bprintf(dstbuf, "%s", "'"); |
|
|
|
break; |
|
|
|
case '"' : |
|
|
|
if (!(flags & AV_ESCAPE_FLAG_XML_DOUBLE_QUOTES)) |
|
|
|
goto XML_DEFAULT_HANDLING; |
|
|
|
|
|
|
|
av_bprintf(dstbuf, "%s", """); |
|
|
|
break; |
|
|
|
XML_DEFAULT_HANDLING: |
|
|
|
default: av_bprint_chars(dstbuf, *src, 1); |
|
|
|
} |
|
|
|
} |
|
|
|
break; |
|
|
|
|
|
|
|
/* case AV_ESCAPE_MODE_BACKSLASH or unknown mode */ |
|
|
|
default: |
|
|
|
/* \-escape characters */ |
|
|
|