From patchwork Sat Mar 7 15:12:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Zhao, Gang" X-Patchwork-Id: 18082 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 370B744B7DE for ; Sat, 7 Mar 2020 17:21:21 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 1915E68AD79; Sat, 7 Mar 2020 17:21:21 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pg1-f194.google.com (mail-pg1-f194.google.com [209.85.215.194]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9B4EC6881B6 for ; Sat, 7 Mar 2020 17:21:14 +0200 (EET) Received: by mail-pg1-f194.google.com with SMTP id u12so2537385pgb.10 for ; Sat, 07 Mar 2020 07:21:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=AVs98Yu6FjydU64V5kS5PN0cKgRz233ZfituVTbo1Hc=; b=pELMUpgCNbVPmbnaLfImTzO5fmVBrbUKBFi5EcvM19hMDffBk/YVPqnoAToZChT+dr ldQMMXXYLHCfGW/VgUwPZhv6Zh4p9v1eqY6Sf+4DZuukFYytOFvRJvdUbJLz/ozmeTY4 tlEqo732QD27hnI8XgU5QtMc4TlxKspQbfyQZksnXDisevbLT0ktuQ/AuZWcq29Zy5A7 qDGvLROq8fGIk/AWAvf9BbN44QS+/Mm07aVInYAC6z76sa87kIk6vUuXR0wbAe8sJqSp k0ZcKWbGN8wWBy1Um4VZjwMLfZUQexoFmzqbvANdTMPz0liuN8qsvDXKtj6J8SUPMRfH QzWg== 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; bh=AVs98Yu6FjydU64V5kS5PN0cKgRz233ZfituVTbo1Hc=; b=XDTMcjyJBoR8sldr7gMYCRAbJvCEnMdbBnQWXbAgvPQsw8Doq+9dV70Si/PRLaixSC LXha2BpfxAGufX/Q6eIfbbTK8HTEmOVMQxpO6Qdge8M6GFR7JcEq75p4+xGfGpEHYpDQ JtMtM5z+nntpYT94IdmwSlZwygUz+JEg4UafeVq5Va8iisqb4Fla2dkCojafz8+LOoIA J05m+2eRx0GZsBVbm7Z9H0gmgl1RCAzZme/2Ci/TIFWMfr3SRYZ2YD9fxYZxYA+42n2Q qLEV8DaX0vJ8cdDN48GeAbT6sPoktb/5PDbGWhN5t8ryTtcLGnsmcC5BNNMcuxaZPo3L xoCw== X-Gm-Message-State: ANhLgQ0id9G4F0+gI92TWiVwJp/YPygBDCukfJOAAQtK+9RYP2Cow283 AyyT2qLRDUd4byZl1w7sJdwgjqsUsESU1w== X-Google-Smtp-Source: ADFU+vs+2049HShvQcYmtUNeQw8cGTuSNDCMhPtoseOGVTKo+8ISjUCvQwU3Z7RRa8cJPRqTnnV1iQ== X-Received: by 2002:a63:ec4d:: with SMTP id r13mr8356478pgj.232.1583594028242; Sat, 07 Mar 2020 07:13:48 -0800 (PST) Received: from localhost.localdomain ([2408:805f:e20a:41ae:5dbb:81aa:70af:1adc]) by smtp.gmail.com with ESMTPSA id w81sm26357243pff.22.2020.03.07.07.13.23 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 07 Mar 2020 07:13:47 -0800 (PST) From: "Zhao, Gang" To: ffmpeg-devel@ffmpeg.org Date: Sat, 7 Mar 2020 23:12:58 +0800 Message-Id: <53faacb3ea922fde5ca94f6f1da537f030bee916.1583593011.git.gang.zhao.42@gmail.com> X-Mailer: git-send-email 2.17.1 Subject: [FFmpeg-devel] [PATCH] libavformat/lrcdec: Fix count of timestamp 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Current function count_ts will count invalid timestamp formats like [00:00:00] [00-00-00] or [00:00.00][[[00:00.00]]] as valid timestamp. This could cause some subtitles would be incorrectly counted as timestamp. Fix it by using function read_ts to check valid timestamp and get the offset. Fixes trac #7255. Signed-off-by: Zhao, Gang --- libavformat/lrcdec.c | 38 +++++++++++++------------------------- 1 file changed, 13 insertions(+), 25 deletions(-) diff --git libavformat/lrcdec.c libavformat/lrcdec.c index a9a117691a..3b206cf079 100644 --- libavformat/lrcdec.c +++ libavformat/lrcdec.c @@ -49,31 +49,6 @@ static int64_t find_header(const char *p) } } -static int64_t count_ts(const char *p) -{ - int64_t offset = 0; - int in_brackets = 0; - - for(;;) { - if(p[offset] == ' ' || p[offset] == '\t') { - offset++; - } else if(p[offset] == '[') { - offset++; - in_brackets++; - } else if (p[offset] == ']' && in_brackets) { - offset++; - in_brackets--; - } else if(in_brackets && - (p[offset] == ':' || p[offset] == '.' || p[offset] == '-' || - (p[offset] >= '0' && p[offset] <= '9'))) { - offset++; - } else { - break; - } - } - return offset; -} - static int64_t read_ts(const char *p, int64_t *start) { int64_t offset = 0; @@ -99,6 +74,19 @@ static int64_t read_ts(const char *p, int64_t *start) return offset; } +static int64_t count_ts(const char *p) +{ + int64_t total_offset = 0; + int64_t offset, start; + + while ((offset = read_ts(p, &start)) != 0) { + total_offset += offset; + p += offset; + } + + return total_offset; +} + static int64_t read_line(AVBPrint *buf, AVIOContext *pb) { int64_t pos = avio_tell(pb);