From patchwork Mon Feb 12 02:01:57 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Oneric X-Patchwork-Id: 46219 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:9002:b0:19e:cdac:8cce with SMTP id d2csp436360pzc; Sun, 11 Feb 2024 18:02:55 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCVfn2wyC02il8u5BO8d/HAcoLL5QaZ+ONik+NP4R7Uz59lLAV/9ouE9jFvaThiKbjEP/mrXDb5IMNDJOJ77e5zf43xnTryvVUuSRA== X-Google-Smtp-Source: AGHT+IHwDoiJ/f454S0DP9gFAUc2qcp6ykHrCA/7u4ClDSAAa7l7WhlgInMs61hzZ9xqL4kLDIMI X-Received: by 2002:a05:6512:2354:b0:511:730b:5c7f with SMTP id p20-20020a056512235400b00511730b5c7fmr4943742lfu.30.1707703375628; Sun, 11 Feb 2024 18:02:55 -0800 (PST) X-Forwarded-Encrypted: i=2; AJvYcCWI53HWFdIFd7yxanX8LEZodaj+ZLIZmF100GnY/dm6mu1QagliHqGPlg62k9ifLekM6qq9t/9wbOzNNovBXLMd/BPWgy6RGvtpD+xF8aCwpP9Aw4duYAX0Qj6ZCVH//HEgMUYOU7FxTgDcmzxAJR1M9iOqDuROn0dbk7HlojEDSILUvgL+o4HzEB4+qXlxfdp4LCM69YqO68pbmuAn4Io8v2dURY1Aac5NtIRcHvh8HIoAHusaNjG3ke5PWGMgx9cM2yVASDn1hdvq06jkSAmQdSYx58BbPordWmTAV9uPG8rNWD+E/28V3DkcEmg/D0cNmcxPeoO/UYs1NHt8epHMnHW69UeksLyu8/y89rwZCQscENG/CWmbc7Q7y4zncRy+qU5pmFmZzU3s3WvfXWt8ZdTGvGaU5GBgkU40OFfPoUeQXiaWeTwLacD9OK+Ifd/L3DpGnDmavhhuWCWPfw7SyYN1IZVvrbSt+u/uzhuVqln5B4c4NBWwihWBpGKTtBZ37Y0o2MCtNDIe4pAA3XYndpMdBysDhsZVm1A2XN+9Jy1oYqxVWY6ALCLraGUu7St02Skue1LjFNAQ38bM54Ui5tltgcmDVKHoOIWLmfMWwfBEm5fYx+48I3cMQxeAXZPIlw7VbthMc3BP+en2PbagMH+Wc2sSZzs7PBh6PWxb1hLjeAZhzc/uZrWcVhN5vBBAHKdo/blwJud8xzueMSGOwBl6BxVfH1KKm3Qp4MfndeOCVz3K8AHfd8T+ewZOC9YASygg52PuzsKRWKSsEKtVlPbgz7pQmVGzxwR3ERXLSSF3wszTFfgMJeu7vvkboj2Yq2P24xvH4Y8ZsdrJ8VQrqwPhqPh/e5h7yMaZbAh2XIzKdMItwSnoLLOsCrbMayFLlqYZfYkM/CqI9Zu61dN03N4eSZ3H75CBu/PblHQeNSQmAEfRLaIZwA7y+393LCafSU 9jtdz5/RiJEObiSXJLqk+pn93vm+2MbTTunB7AjGvDLz2+/bthPvJtWeefpFozTs4hvUQLrgjY7yuz54vRO2tuuvZ8q6hSYLHvmi5esQiB73rggFCu//LNBXzX979M0+YXVuqqb8aAaj7ji3NC5D8e4SuU7QOTa4i3LU2w6L1GOhzu04idtrnSfRa0AjjOUSut6uG9ImfAtgs7RV2ryVVTX3xdkFErZkMP7eiz4fCCnoIg6GAfiJzde5wut8r7Qt+9cUWP/sWq9fPrs/7vZeIydyNJbbiwLTE7B5xA8+xOaFzeRO2UEkeBKQr7AapGlzZAkTrb/Nm4DgrWPVGOX/swN6pl1s23LKbeU8Vx0VJL7iEBvQu79iXfif0juEhp1NNLwwcPoVmXBq8GWMrdP8tnYyKIQuZ71gFXrRvibymm14H60Lluu8j+1Dxy2brnjNCTUxyrmnnWe7jA3oH+umn0Tl4ieiQyLbI3cG3thNo4qGTvnSoRfvQPJ9bbghIAF4lXd8ftp8DL/VWgeAgipV/pFkKLfoFfAuf41GdLz2cefIaWyll/JdVZxlNLLW8dbTRg/WSF6XTTbX+uKW7rEzWVgQvzpsSL8stsCxc= Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id b8-20020a170906194800b00a3c2c8e5962si2139390eje.820.2024.02.11.18.02.55; Sun, 11 Feb 2024 18:02:55 -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=@oneric.de header.s=strato-dkim-0002 header.b=LoD3vfpW; dkim=neutral (no key) header.i=@oneric.de header.s=strato-dkim-0003; arc=fail (body hash mismatch); 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 52AEC68D150; Mon, 12 Feb 2024 04:02:29 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mo4-p00-ob.smtp.rzone.de (unknown [85.215.255.23]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8540568CF0D for ; Mon, 12 Feb 2024 04:02:18 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; t=1707703337; cv=none; d=strato.com; s=strato-dkim-0002; b=CMpzcpnWQkLZxyFW0KN7lGum7PbadIRgs2B9i+OIum62bRI5S5Sv0XMJ8gFAftEAse lOEv543yolc80bciZDkklqOvWWTlIkl2xrPtKTejUsz2PvKDSrXxooG1RL4CAavBvT+k ATpGhAHgUsYVWo9FkRc9tWM71LYH4SMLeA6i2yzQgB7y9N0pkZ54DIJv67sbIorql2tU 9G6mjSvXnGXw/flT0cymaj99SrPZMWHYnB5/ElHR1bden+0JcBwj7YHiFTfELLcNNb+4 IiffPw/vG8yB7ifjw5lnUx7Dk8/9hOSAMlshTUjWRcqMYhotFD/DS1BWR+0JJ8JgDNdz EonQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; t=1707703337; s=strato-dkim-0002; d=strato.com; h=References:In-Reply-To:Message-Id:Date:Subject:To:From:Cc:Date:From: Subject:Sender; bh=eGbefD26wGMQ3COdVU6o6keSmR5BpzQynIEQyp4s/fI=; b=Ld0sw6vHrAuXGL0zUpplJOr2ljd7L3vlueouKMbz2A5gmtoKps052bzy3hn54/O1mo U/Fb6dW5U1NgjnfVHqVeu9KVHmjTNd6ySZS85yxuTIc1j/7PBWRyvYuPeU1i9whMrVah sU3gW+wC/AMq80JiQfO7yX3JSu8rgJti2CIEg1aPqd+EQnJQMlJ2hZint9Sj8SZ9MaW0 bsQwjGK5KAbSqQ/lyQby07gGL3T5g9MEd8Cv/nH/rYTp6o1YiVbdu3Af8D7qYQ/qGJd9 ff58FuHixxM4hq9lXM362tktrLYW2aJTAaSjDjD0FuxZRIk3fBqjuLWaNr2OaV++RVPy /O8A== ARC-Authentication-Results: i=1; strato.com; arc=none; dkim=none X-RZG-CLASS-ID: mo00 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1707703337; s=strato-dkim-0002; d=oneric.de; h=References:In-Reply-To:Message-Id:Date:Subject:To:From:Cc:Date:From: Subject:Sender; bh=eGbefD26wGMQ3COdVU6o6keSmR5BpzQynIEQyp4s/fI=; b=LoD3vfpWaPQ/6tay981YWQhD2cWwD07SRXKFF7v2SRHBKr9wj63I876jBlpNNFFo78 iOMvQxGtSkHYRrwuXXZpDFbuOO7NITBWmJQhqaN5EYkHFhwuPijpvUrHw2lCpZrJMSqG nBJVxh0KsV1DEBxRmCCBMfexwyRkrm6cbVi3AjjQ8i1Y/qsWNyWWnRhGtuS+IdtoidGn zf7NJggBNSsfNAzEscb0bgRvy/igYDbJsyewNzJscdis9GFIJGxZpABkObYFFrbzr1kH oVvzFW+85OHCNoPP1HJ+B7x0Qb0f2sCz7QJAkzchCw7vnN2zkijhag43A03IMzT6jqoa z9Tw== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; t=1707703337; s=strato-dkim-0003; d=oneric.de; h=References:In-Reply-To:Message-Id:Date:Subject:To:From:Cc:Date:From: Subject:Sender; bh=eGbefD26wGMQ3COdVU6o6keSmR5BpzQynIEQyp4s/fI=; b=+bb0C7lsEflfitDYyoOR6wBPxIwFHwEW4GITF8luqAt75iiHtvcaSJeaGsUME2WYlv dbceNk85aTgyqKItMTBA== X-RZG-AUTH: ":I2IBZ0mrW/AWQXwgB4oxKM1YsW1lFUznrLvi/XReWqAAlWwZ8wlvfXmGs4jUQ0oz8ZbhHexs8fhgUyJVddUhvSMyyTdkfRqedioxw5M6" Received: from abhoth.workgroup by smtp.strato.de (RZmta 49.11.2 AUTH) with ESMTPSA id x7ec2e01C22HBx3 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits)) (Client did not present a certificate) for ; Mon, 12 Feb 2024 03:02:17 +0100 (CET) From: Oneric To: ffmpeg-devel@ffmpeg.org Date: Mon, 12 Feb 2024 03:01:57 +0100 Message-Id: <20240212020159.6806-3-oneric@oneric.de> In-Reply-To: <20240212020159.6806-1-oneric@oneric.de> References: <20240212020159.6806-1-oneric@oneric.de> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 2/4] avcodec/{ass, webvttdec}: fix handling of backslashes X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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: A4azJ0QxsdC4 Backslashes cannot be escaped by a backslash in any ASS renderer, but unless followed by specific characters it is just printed out. Insert a word-joiner character after a backslash to break up active sequences without changing the visual output. --- libavcodec/ass.c | 9 ++++++++- libavcodec/webvttdec.c | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/libavcodec/ass.c b/libavcodec/ass.c index 5058dc8337..a68d3568b4 100644 --- a/libavcodec/ass.c +++ b/libavcodec/ass.c @@ -183,9 +183,16 @@ void ff_ass_bprint_text_event(AVBPrint *buf, const char *p, int size, /* standard ASS escaping so random characters don't get mis-interpreted * as ASS */ - } else if (!keep_ass_markup && strchr("{}\\", *p)) { + } else if (!keep_ass_markup && strchr("{}", *p)) { av_bprintf(buf, "\\%c", *p); + /* append word-joiner U+2060 as UTF-8 to break up sequences like \N */ + } else if (!keep_ass_markup && *p == '\\') { + if (p_end - p <= 3 || strncmp(p + 1, "\xe2\x81\xa0", 3)) + av_bprintf(buf, "\\\xe2\x81\xa0"); + else + av_bprintf(buf, "\\"); + /* some packets might end abruptly (no \0 at the end, like for example * in some cases of demuxing from a classic video container), some * might be terminated with \n or \r\n which we have to remove (for diff --git a/libavcodec/webvttdec.c b/libavcodec/webvttdec.c index 990d150f16..6e55bc5499 100644 --- a/libavcodec/webvttdec.c +++ b/libavcodec/webvttdec.c @@ -37,7 +37,7 @@ static const struct { {"", "{\\i1}"}, {"", "{\\i0}"}, {"", "{\\b1}"}, {"", "{\\b0}"}, {"", "{\\u1}"}, {"", "{\\u0}"}, - {"{", "\\{"}, {"}", "\\}"}, // escape to avoid ASS markup conflicts + {"{", "\\{"}, {"}", "\\}"}, {"\\", "\\\xe2\x81\xa0"}, // escape to avoid ASS markup conflicts {">", ">"}, {"<", "<"}, {"‎", "\xe2\x80\x8e"}, {"‏", "\xe2\x80\x8f"}, {"&", "&"}, {" ", "\\h"},