From patchwork Fri Jan 22 11:20:55 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: 25105 Delivered-To: andriy.gelman@gmail.com Received: by 2002:a25:ab61:0:0:0:0:0 with SMTP id u88csp1082978ybi; Fri, 22 Jan 2021 03:21:19 -0800 (PST) X-Google-Smtp-Source: ABdhPJxa2/JToeU5G4vFWzSfUoG3DgOQcBtgdU10Ccxn4UB3yPAfUqL4JRcmimbkHB1B7EOZFHIk X-Received: by 2002:a05:6402:6c4:: with SMTP id n4mr2848878edy.257.1611314479591; Fri, 22 Jan 2021 03:21:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1611314479; cv=none; d=google.com; s=arc-20160816; b=PeKbR/NpEvT+cnwGkVioIU/8QEW1bRJhwE/VDaVGmdWmIapstUQhCLsFnjF/6GUNCK NdDkaTL8jDpWXCH13v+UuwxW5mLEfXuuGtlrhE6Tvo8rX26uT3+exEPussd1wAQmddBj RatUzP3A64VZTDQIooFZjB9zOxej9y9rp1i49cqNAP7Gqzo7PZUc3IamEUvsjRRWM0t3 LvpCp7lRbUwSoFn7ILaXF7/ao2E8fnxGidR9A/KVrn68yqOYCLoTHT9bJdGEn8jKCIj7 Ku9wuCX1M24OHJPTMEd1ccaG+MIZqe94kDGGRcXlhZbpzfiMkgMMpHz3C3j+jDQS8SuH U2Eg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=CAz4K8Q+Hn1YzWYYBfgVyX/3eNuqOhcQignYMOs3Sug=; b=O21Zg/ulLqLMIrNky0JKW1akDsDX0YMKZS28HaFjWsfBdJy1bYox391sSXRzozOTff SReax3VW+nsHO52rINyxKSCAI9bSoHxmfmwa9788zQ2nyO1y94nV10kIr4hxv/8p0jKB ImH/UQRcrS/kl+WtnLX1RDxgEY8nczSzC4dPXoVqmFz5Hw+CdyBP1tb/s8NXQdo469+b KaeibWhtnaHi6xaOHVOJOPS6liNdvCQ6OPgrKSdGiIb88L5jBAw1OIWEWUwEe+mUNJWz yTgHWFjFICjcM7NVe/G/8MSfQyoJRtommFnd4rEZbSuweb29S9EdyMKhdaiLJ7xzDK2c TzyA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=OSVrVLFI; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id g7si3095435edr.423.2021.01.22.03.21.19; Fri, 22 Jan 2021 03:21:19 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=OSVrVLFI; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id AD1D768A370; Fri, 22 Jan 2021 13:21:09 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lf1-f54.google.com (mail-lf1-f54.google.com [209.85.167.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 06D5668A27A for ; Fri, 22 Jan 2021 13:21:03 +0200 (EET) Received: by mail-lf1-f54.google.com with SMTP id v67so7049212lfa.0 for ; Fri, 22 Jan 2021 03:21:02 -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=m1yZwq9IlDE2+HFILR3smsGgsMx/AUqmBDDXX8hBKNw=; b=OSVrVLFI197QasoPVb7Hnl8ocdU6GsLatFGQdSgUI5LzQmiruO0jDCLEgx5vtuX50t jR+N8KZh8G99jp8rKU+yYOR2Yobc0BfqBDBaPe/6O8QIyWrWIvfTPaOqZKtl0HJNoX1b yn95DtSHetzGG9ejVpEwOY8VsQWCz5cA0qlJz63KrKlcCQv7Cdoo2KTXkrv7nfkux02R HYo2GY48AR11IsQNmjBRS9nn5X0b8lvWWMLQkiLJad0Yo2dqMvSASVE5IsB9x3myJJA0 VO3RW7y+ww1XZP6lI9pocypKaUgApTqj+BuNcIaCLdlmGJgDrL1/PWUUIlr52WSH2scL GmTg== 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=m1yZwq9IlDE2+HFILR3smsGgsMx/AUqmBDDXX8hBKNw=; b=tPFnjgJoXGBSEatUXvainjWbc4mO9t7BvUHLZTeo6QnbLZmp1YgP+Ql2pRZbQEkC/9 U944rqww1WYBkcpmIB+PbvTmz/LwomkuA595/vpX2H7NOqkFtRzlE6zN+LNZYgyWb3ht b5PYgcgCtGUSUjhUcNWAEHdkFJRPesR/DJq+/L9ydHbsMebWDMoRrOhT6Yfthnq0banU jIZa5mZqh0c7kOnWgYx8ZFGnk0jFbVwSiijuiSi9QuL1C0XPfOQRD6/fFg5lTeJmFnRa MROnY4C0X1LOMnUgyNc2+HAEVJZZ6sMsUxgRSzrg7G5b5lbjkg/5LrRKv2r8WySQbWUW uKFQ== X-Gm-Message-State: AOAM532gV/EvK5+XpzjhN4l0a71jhMCxyHxDU/IwpWui3vuz1tQyjmJE eVm3TWP9D6OmqCc5hU6mzO2hLYyuJVs= X-Received: by 2002:a05:6512:1310:: with SMTP id x16mr774775lfu.19.1611314462416; Fri, 22 Jan 2021 03:21:02 -0800 (PST) Received: from localhost.localdomain (91-159-194-103.elisa-laajakaista.fi. [91.159.194.103]) by smtp.gmail.com with ESMTPSA id v24sm919451ljc.56.2021.01.22.03.21.01 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Jan 2021 03:21:01 -0800 (PST) From: =?utf-8?q?Jan_Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Fri, 22 Jan 2021 13:20:55 +0200 Message-Id: <20210122112058.49068-2-jeebjp@gmail.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210122112058.49068-1-jeebjp@gmail.com> References: <20210122103725.24370-1-jeebjp@gmail.com> <20210122112058.49068-1-jeebjp@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v4 1/4] 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" X-TUID: zmuT6knN2+NQ Content-Length: 4523 From: Stefano Sabatini --- libavutil/avstring.h | 7 ++++--- libavutil/bprint.c | 15 +++++++++++++++ tools/ffescape.c | 7 ++++--- 3 files changed, 23 insertions(+), 6 deletions(-) diff --git a/libavutil/avstring.h b/libavutil/avstring.h index ee225585b3..189b4726a5 100644 --- a/libavutil/avstring.h +++ b/libavutil/avstring.h @@ -321,9 +321,10 @@ int av_match_name(const char *name, const char *names); char *av_append_path_component(const char *path, const char *component); 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_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_CHAR_DATA, ///< Use XML non-markup character data escaping. }; /** diff --git a/libavutil/bprint.c b/libavutil/bprint.c index 2f059c5ba6..7cdbb75095 100644 --- a/libavutil/bprint.c +++ b/libavutil/bprint.c @@ -283,6 +283,21 @@ void av_bprint_escape(AVBPrint *dstbuf, const char *src, const char *special_cha av_bprint_chars(dstbuf, '\'', 1); break; + case AV_ESCAPE_MODE_XML_CHAR_DATA: + /* 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..e18f1edaf9 100644 --- a/tools/ffescape.c +++ b/tools/ffescape.c @@ -101,9 +101,10 @@ int main(int argc, char **argv) break; } case 'm': - 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; + 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_char_data")) escape_mode = AV_ESCAPE_MODE_XML_CHAR_DATA; else { av_log(NULL, AV_LOG_ERROR, "Invalid value '%s' for option -m, "