From patchwork Fri Dec 4 14:46:41 2020 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: 24343 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 8306244A3AF for ; Fri, 4 Dec 2020 17:10:07 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 661FC68A16A; Fri, 4 Dec 2020 17:10:07 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lf1-f42.google.com (mail-lf1-f42.google.com [209.85.167.42]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DE1AF68A148 for ; Fri, 4 Dec 2020 17:10:00 +0200 (EET) Received: by mail-lf1-f42.google.com with SMTP id s27so8074845lfp.5 for ; Fri, 04 Dec 2020 07:10:00 -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=rP253kpjqZiljs92b+CrfwTGY1ujjJ2mgme94djPKrY55M6fUQ3XHsj073lZV+Sf5P iou4Mqt0OLAh1ei0Hav+3fyqGm1OrMPLm1l7aApdRDgolzae1/i1CgEUe4SWkzrO/JC7 6TiNgi6MVBkhMoOPsMxXRYnKi9Hsi4EogtZ7lW0j4rl55rpNAk87wP8K0ASTqZ4lb16o 93Du7Ammgk91CsbQ4b0f5WBi4cdi9XnRq4w39+8JWIFbkpxNAxLpHlIt+MloonRES17u xaPLuF2fvX67PzQZLotnH4goaABfjeMwSOMHs8JkmAkiIQKRbg4vf/jD6YJc0jQ7YNRT V2SQ== 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=rXtpa+/I/buiO4He2Vl42yPVxxUib9Lb4+km+cB6BA013HzWD2zDWViROA350Zk6hf izvTlbbHTK+tqxGndkM3CORihaEAzwS7viqWeucRF8UyxDylrygc+a5dOUvMeMjTYfAl g5zSmHDzwmXY0DWQB4kasLbm4qX1Q9Gyo3HZAqUHa+4/WM6TNogo8D9uja6YzSktOet2 3mUErECmOPfEP7p/VeJP3tmldgVs5OLg9ukugE8MpOoKgu/AEsW0xufPB2UDtWB6GS6V gnDRACMVNr7G1ElOLYmP9M/k7Gyz9JA5WSYvh1/9QgOU3EuE4+hp0ABjejLslliSgNnp HMQQ== X-Gm-Message-State: AOAM531SENOxsycsUQMDdp2mYvlzP6yFPaxufS6WssYlKsSRjVnz6QSt WUIBoMQ7cOBw5sf3WDjP7VjKCCDaz+cm+g== X-Google-Smtp-Source: ABdhPJxWEJRzGIrW4WpW6RqV8zNR+Ml0zL4fZ0PAG/0KP7RtG242t9+wDjgdEKrIgy7Bx3T9/0Kyeg== X-Received: by 2002:ac2:41d9:: with SMTP id d25mr3634568lfi.377.1607093207807; Fri, 04 Dec 2020 06:46:47 -0800 (PST) Received: from localhost.localdomain (91-159-194-103.elisa-laajakaista.fi. [91.159.194.103]) by smtp.gmail.com with ESMTPSA id t2sm1750308lfd.59.2020.12.04.06.46.46 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Dec 2020 06:46:47 -0800 (PST) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Fri, 4 Dec 2020 16:46:41 +0200 Message-Id: <20201204144643.73279-2-jeebjp@gmail.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20201204144643.73279-1-jeebjp@gmail.com> References: <20201204144643.73279-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 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, "