From patchwork Fri Feb 22 23:41:34 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dale Curtis X-Patchwork-Id: 12144 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 53D4944854B for ; Sat, 23 Feb 2019 01:41:54 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3C4D9689D13; Sat, 23 Feb 2019 01:41:54 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-yw1-f46.google.com (mail-yw1-f46.google.com [209.85.161.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A4E21689731 for ; Sat, 23 Feb 2019 01:41:47 +0200 (EET) Received: by mail-yw1-f46.google.com with SMTP id o184so1495866ywo.5 for ; Fri, 22 Feb 2019 15:41:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:from:date:message-id:subject:to; bh=+pe5yQv5NZrmzYFr+XLApEqoKL3ENTXRy/k4WaI+iJ4=; b=FG7bBUjhNMzsKVO+yu/xHKS+19vjclVJ7c0gE9QrNLrDhSH9SBmMJgSCiqFEH9i3t3 KXLHixJKm/cnIkGlQ88leSIfqMcZmld1x2feU9aZi8vIL61nWlK014RTxWWhhXBtwNt8 5HqkMoVEixH8t/n9sZzc9hzUfUiN2+6T9BcU8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=+pe5yQv5NZrmzYFr+XLApEqoKL3ENTXRy/k4WaI+iJ4=; b=pFe5LZJU5r95suQ3JsjK/edx7yAKcTiWs4ou5u3semczwNZhh1jcz86rI0h3RY4Mrn Fy3k3fQEUnxZvnDjMtB6xO5wQliOLv7zWe+xewSuAkStg9OPztouM8Me9i3e8Vi/HdHn BqfkN4Pn/3M8+HDzL47EKdS+6KEX+4d/f3UMu+gQqEnfWx741/pBzrAVPVHQTVQWI4ji mhPmq49RH515K4dB76Oy+Px5d31kIGIn4m5xbyOxb0E4y2fXWzrxmE7+8W8X3WBsUh39 Yz9ClRqn3gCD0gEZeuugOM9P/nXzHRi2mo8T4O78E2uCff8hOv49gKKLPbBrDoXqhCEX edBg== X-Gm-Message-State: AHQUAuZzCp9tNHrnPwKIYUBZ5OjqKw6WSpmPc5tX1o3JyaJDcb1jydHa lXWHvc+OYru0kklo/hz7e0tHzKcvLdLjlirQUdIoHa2AGxnG1w== X-Google-Smtp-Source: AHgI3IZOPgLyS2mU3M1yAewZJLOfqiicfShZirWAPWXWo+1vSurvoW4h7Gu407dKxgYdkdvcaSoSMIuYPnoa/6ANPbQ= X-Received: by 2002:a81:6385:: with SMTP id x127mr5618528ywb.450.1550878905747; Fri, 22 Feb 2019 15:41:45 -0800 (PST) MIME-Version: 1.0 From: Dale Curtis Date: Fri, 22 Feb 2019 15:41:34 -0800 Message-ID: To: FFmpeg development discussions and patches X-Content-Filtered-By: Mailman/MimeDel 2.1.20 Subject: [FFmpeg-devel] [PATCH] Fix handling of unknown length case for matroska files. 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" Unknown length has a special encoding which is not uint64_t(-1). Signed-off-by: Dale Curtis --- libavformat/matroskadec.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) From 2bf28a1edb54297f44021771b4c3d847c1f923f4 Mon Sep 17 00:00:00 2001 From: Dale Curtis Date: Fri, 22 Feb 2019 15:39:25 -0800 Subject: [PATCH] Fix handling of unknown length case for matroska files. Unknown length has a special encoding which is not uint64_t(-1). Signed-off-by: Dale Curtis --- libavformat/matroskadec.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 5aa8a105dc..6d86342016 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -68,6 +68,9 @@ #include "qtpalette.h" +// 2^56 - 1. +#define EBML_UNKNOWN_LEN 0xffffffffffffffULL + typedef enum { EBML_NONE, EBML_UINT, @@ -869,7 +872,7 @@ static int ebml_read_length(MatroskaDemuxContext *matroska, AVIOContext *pb, { int res = ebml_read_num(matroska, pb, 8, number); if (res > 0 && *number + 1 == 1ULL << (7 * res)) - *number = 0xffffffffffffffULL; + *number = EBML_UNKNOWN_LEN; return res; } @@ -1049,7 +1052,7 @@ static int ebml_parse_id(MatroskaDemuxContext *matroska, EbmlSyntax *syntax, break; if (!syntax[i].id && id == MATROSKA_ID_CLUSTER && matroska->num_levels > 0 && - matroska->levels[matroska->num_levels - 1].length == 0xffffffffffffff) + matroska->levels[matroska->num_levels - 1].length == EBML_UNKNOWN_LEN) return 0; // we reached the end of an unknown size cluster if (!syntax[i].id && id != EBML_ID_VOID && id != EBML_ID_CRC32) { av_log(matroska->ctx, AV_LOG_DEBUG, "Unknown entry 0x%"PRIX32"\n", id); @@ -1201,7 +1204,7 @@ static int ebml_parse_elem(MatroskaDemuxContext *matroska, MatroskaLevel *level = &matroska->levels[matroska->num_levels - 1]; AVIOContext *pb = matroska->ctx->pb; int64_t pos = avio_tell(pb); - if (level->length != (uint64_t) -1 && + if (level->length != EBML_UNKNOWN_LEN && (pos + length) > (level->start + level->length)) { av_log(matroska->ctx, AV_LOG_ERROR, "Invalid length 0x%"PRIx64" > 0x%"PRIx64" in parent\n", @@ -1610,7 +1613,7 @@ static int matroska_parse_seekhead_entry(MatroskaDemuxContext *matroska, ret = AVERROR_INVALIDDATA; } else { level.start = 0; - level.length = (uint64_t) -1; + level.length = EBML_UNKNOWN_LEN; matroska->levels[matroska->num_levels] = level; matroska->num_levels++; matroska->current_id = 0; @@ -1620,7 +1623,7 @@ static int matroska_parse_seekhead_entry(MatroskaDemuxContext *matroska, /* remove dummy level */ while (matroska->num_levels) { uint64_t length = matroska->levels[--matroska->num_levels].length; - if (length == (uint64_t) -1) + if (length == EBML_UNKNOWN_LEN) break; } } -- 2.21.0.rc0.258.g878e2cd30e-goog