[FFmpeg-devel] [PATCH 1/3] avutil/{avstring, bprint}: add XML escaping from ffprobe to avutil
Jan Ekström
jeebjp at gmail.com
Fri Dec 4 16:46:41 EET 2020
From: Stefano Sabatini <stefasab at gmail.com>
---
libavutil/avstring.h | 1 +
libavutil/bprint.c | 14 ++++++++++++++
tools/ffescape.c | 1 +
3 files changed, 16 insertions(+)
diff --git a/libavutil/avstring.h b/libavutil/avstring.h
index ee225585b3..79bb920a70 100644
--- a/libavutil/avstring.h
+++ b/libavutil/avstring.h
@@ -324,6 +324,7 @@ enum AVEscapeMode {
AV_ESCAPE_MODE_AUTO, ///< Use auto-selected escaping mode.
AV_ESCAPE_MODE_BACKSLASH, ///< Use backslash escaping.
AV_ESCAPE_MODE_QUOTE, ///< Use single-quote escaping.
+ AV_ESCAPE_MODE_XML, ///< Use XML non-markup character data escaping.
};
/**
diff --git a/libavutil/bprint.c b/libavutil/bprint.c
index 2f059c5ba6..d825b61b14 100644
--- a/libavutil/bprint.c
+++ b/libavutil/bprint.c
@@ -283,6 +283,20 @@ 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 */
+ for (; *src; src++) {
+ switch (*src) {
+ case '&' : av_bprintf(dstbuf, "%s", "&"); break;
+ case '<' : av_bprintf(dstbuf, "%s", "<"); break;
+ case '>' : av_bprintf(dstbuf, "%s", ">"); break;
+ case '"' : av_bprintf(dstbuf, "%s", """); break;
+ case '\'': av_bprintf(dstbuf, "%s", "'"); break;
+ default: av_bprint_chars(dstbuf, *src, 1);
+ }
+ }
+ break;
+
/* case AV_ESCAPE_MODE_BACKSLASH or unknown mode */
default:
/* \-escape characters */
diff --git a/tools/ffescape.c b/tools/ffescape.c
index 0530d28c6d..8537235d5e 100644
--- a/tools/ffescape.c
+++ b/tools/ffescape.c
@@ -104,6 +104,7 @@ int main(int argc, char **argv)
if (!strcmp(optarg, "auto")) escape_mode = AV_ESCAPE_MODE_AUTO;
else if (!strcmp(optarg, "backslash")) escape_mode = AV_ESCAPE_MODE_BACKSLASH;
else if (!strcmp(optarg, "quote")) escape_mode = AV_ESCAPE_MODE_QUOTE;
+ else if (!strcmp(optarg, "xml")) escape_mode = AV_ESCAPE_MODE_XML;
else {
av_log(NULL, AV_LOG_ERROR,
"Invalid value '%s' for option -m, "
--
2.29.2
More information about the ffmpeg-devel
mailing list