From patchwork Wed Mar 22 04:07:54 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dzung Hoang X-Patchwork-Id: 3059 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.103.50.79 with SMTP id y76csp134132vsy; Tue, 21 Mar 2017 21:08:06 -0700 (PDT) X-Received: by 10.28.136.81 with SMTP id k78mr5431304wmd.36.1490155686612; Tue, 21 Mar 2017 21:08:06 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id j31si262781wre.45.2017.03.21.21.08.05; Tue, 21 Mar 2017 21:08:06 -0700 (PDT) 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=@yahoo.com; 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 88EAE6883A8; Wed, 22 Mar 2017 06:07:44 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from nm27-vm1.bullet.mail.bf1.yahoo.com (nm27-vm1.bullet.mail.bf1.yahoo.com [98.139.213.148]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D1907688342 for ; Wed, 22 Mar 2017 06:07:37 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1490155675; bh=mudZRi5ukjELNyw955jr3zwVvC7lZViniX1eyGc1uZM=; h=Date:From:Reply-To:To:In-Reply-To:References:Subject:From:Subject; b=QN8WvlK+IbxO9qxKezfGKbhdWK0maHubYuvAnJkFIDtmahifwbEPLQSY87UFqcac9rms/iq9EWRrEF5Y4Eij4bfkR+dpkbG+8DGk73GLqgL8IgyI4wCBRr3II4ZjgflSHebWO2welRjPjpHsgjSu8im6Ea6IokjRJvLs48sKq1FYF2eFCELV3XMFguML0h8Q+yUEjuvkz1V52QuPY4kmjUA0zGRKfWq4eikrSjzCPx58AEQyP/2RTpMA+uZn8G6DNmezzPS2weS7HvG39SnEvm1ouqnJJTu7PPgkeCT1rdYYOm/2L/BDoXLUMIL4Ky5erYBrFGVY1P0qb6v8wl3tUw== Received: from [98.139.170.180] by nm27.bullet.mail.bf1.yahoo.com with NNFMP; 22 Mar 2017 04:07:55 -0000 Received: from [98.139.212.248] by tm23.bullet.mail.bf1.yahoo.com with NNFMP; 22 Mar 2017 04:07:55 -0000 Received: from [127.0.0.1] by omp1057.mail.bf1.yahoo.com with NNFMP; 22 Mar 2017 04:07:55 -0000 X-Yahoo-Newman-Property: ymail-3 X-Yahoo-Newman-Id: 142603.54348.bm@omp1057.mail.bf1.yahoo.com X-YMail-OSG: yjX0uXsVM1n775lcv8enmw_haGjXQ7BmQeSh7WJeaYREno42jgvptIjumyJpiWl HGLrWq3VnHxVNdD5_.a3GY4EWViFThpPq5cIj_rV5LGAfch1JUcdeIhe2O5pfRCymAd8YzYT7jMO MRw0aKwm3rQa0sHUg3j_MzzB36KrHaNs.ujSmY0yd8Q00uRl3CYp3H6H8Gob17_d61TmcxVDlFHE 3EKfKE4d78F9n6HTdLFZBHsZWiaGxWFCerdGId8XiGDTR3zaitsAbPR.983xl3wdSCLFV6U4TVOa bul.kOo_tLETJkq6awyTmWlpavy1Go.kYOkMY8hNo9YmWqIsP6yISdNe7tIwxUmQx4uQK3AZhVBi U.jLZl9ZEwH5BqqCY.bPBeJO0LerQZxg8gIK4T9xYbwpi.wSFsqqsB0LNVBE8UvgfTEWwUELvvUS WoC0NGu9Bi6lWFJCjTcDF3uzXqcvt1f158y5NZtD9DlX.81l0PBR3nJLCUyiL9H7znPpdcSUifub lZ2aDASRk5waPzZQ- Received: from jws400095.mail.bf2.yahoo.com by sendmailws129.mail.bf1.yahoo.com; Wed, 22 Mar 2017 04:07:54 +0000; 1490155674.757 Date: Wed, 22 Mar 2017 04:07:54 +0000 (UTC) From: Dzung Hoang To: FFmpeg development discussions and patches Message-ID: <312902492.1008037.1490155674446@mail.yahoo.com> In-Reply-To: References: <1386439495.5593649.1489516596376.ref@mail.yahoo.com> <1386439495.5593649.1489516596376@mail.yahoo.com> <1505729381.2298662.1489767561651@mail.yahoo.com> MIME-Version: 1.0 Subject: Re: [FFmpeg-devel] [PATCH] avcodec/exr detect invalid line offset table and recreate table 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" Sorry about the bad format for the patch. Here's another try. --- libavcodec/exr.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/libavcodec/exr.c b/libavcodec/exr.c index 034920f..265d44d 100644 --- a/libavcodec/exr.c +++ b/libavcodec/exr.c @@ -1640,6 +1640,9 @@ static int decode_frame(AVCodecContext *avctx, void *data, int out_line_size; int nb_blocks;/* nb scanline or nb tile */ + uint64_t *table;/* scanline offset table */ + uint8_t *marker;/* used to recreate invalid scanline offset table */ + bytestream2_init(&s->gb, avpkt->data, avpkt->size); if ((ret = decode_header(s, picture)) < 0) @@ -1731,6 +1734,21 @@ static int decode_frame(AVCodecContext *avctx, void *data, s->buf_size = avpkt->size; ptr = picture->data[0]; + // check offset table + if (!s->is_tile && bytestream2_peek_le64(&s->gb) == 0) + { + table = (uint64_t *)s->gb.buffer; + marker = avpkt->data + bytestream2_tell(&s->gb) + nb_blocks * 8; + + av_log(s->avctx, AV_LOG_DEBUG, "recreating invalid scanline offset table\n"); + + for (y = 0; y < nb_blocks; y++) + { + table[y] = marker - s->buf; + marker += ((uint32_t *)marker)[1] + 8; + } + } + // Zero out the start if ymin is not 0 for (y = 0; y < s->ymin; y++) { memset(ptr, 0, out_line_size);