From patchwork Mon Jan 11 14:20:18 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jan_Ekstr=C3=B6m?= X-Patchwork-Id: 24897 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 0433C44B187 for ; Mon, 11 Jan 2021 16:27:54 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id D7EF468AB46; Mon, 11 Jan 2021 16:27:53 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f44.google.com (mail-wr1-f44.google.com [209.85.221.44]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A0BE068A58A for ; Mon, 11 Jan 2021 16:27:47 +0200 (EET) Received: by mail-wr1-f44.google.com with SMTP id t16so16666754wra.3 for ; Mon, 11 Jan 2021 06:27:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references:mime-version :content-transfer-encoding; bh=5KwDxfDDdlvGXR3dNSHf1Tgeal5wKQxGSYaTMSUowEw=; b=Zx7sCodEIrBzyNDfGQZ9E6GhAws4ssdkk0nwT4iramVmFpWp3JrxrP2iFiIiXvaD6P qcobX2ghq7QZN+37vHbE7SPE3nswgZCaJqbbLl+RBFUobvVOtRWx3FnC5wlnmcRdf/Sg VNqJ+7W2oBQp7O7g5N9TjJEwNrtksbsU7Ggwm82IJIREdbNxqXrWQet6x8C8wmmubJxW JqL8a2QEBHsit3bNLeKrib1+6+DJtHH6mwNksTYeibL/N2MZd3BlJ8l2OXOq2fULyw55 i0GWEfY1UBx4OHwZ2IrFWcX5Y/M9r1lKi29agyFftfxlY4srjM15al2dVrRAeGSKrlHP 92OA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=5KwDxfDDdlvGXR3dNSHf1Tgeal5wKQxGSYaTMSUowEw=; b=o5rA9ulU9KCyuVa1HfgsanAJgMUnyJI9oLI1bgJ+g4ucnXL+B5RYHs4PE+eKI6ElEf 4Gb3rZHIKWUNEacZnDB9OhvghfChAateOcPJX1rEb4tDWDAgnR2WGTg18/IkjgBjhWM/ YQGnOF93eXYvRbd8jYqXDhsthezlEqxE++qQkCttdRjcApDI92S2kcXBld5nM4pSxrhe X49vVhvyic/6sJNe9xeAQrinLlBzsZiHGj729ygg5UYaBormMlGx80waigypadyw9YQb 82mCKTRoaRuzv+SMRMbdoWfsynS8taYJrZne75KhTd72CLpCyRc5qvQ1q7E/MxF1DSik 9EXA== X-Gm-Message-State: AOAM5305RFqj+YcKjHM/YwpmxM/wVVThozWsR9KCIVjP59NTxaJ7eRyV dHged6PkWYfdZpYpOxoCnhaN1L3h1VE= X-Google-Smtp-Source: ABdhPJxn7JtbN2L5xgY+0VMOdYnsyDqwfv7DrOA4Ob9kXoefAz+WZnFGG36/VfGgUmRN7XZNq2PuZg== X-Received: by 2002:ac2:43b6:: with SMTP id t22mr6978712lfl.32.1610374824827; Mon, 11 Jan 2021 06:20:24 -0800 (PST) Received: from localhost.localdomain (91-159-194-103.elisa-laajakaista.fi. [91.159.194.103]) by smtp.gmail.com with ESMTPSA id n20sm3113081lfh.133.2021.01.11.06.20.23 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Jan 2021 06:20:24 -0800 (PST) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Mon, 11 Jan 2021 16:20:18 +0200 Message-Id: <20210111142020.24303-2-jeebjp@gmail.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210111142020.24303-1-jeebjp@gmail.com> References: <20210111142020.24303-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 1/3] avutil/{avstring, bprint}: add XML escaping from ffprobe to avutil X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Stefano Sabatini --- 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, "