From patchwork Thu Mar 14 23:05:05 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Carl Eugen Hoyos X-Patchwork-Id: 12308 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 6211B4485BC for ; Fri, 15 Mar 2019 01:05:15 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 439B368A7AC; Fri, 15 Mar 2019 01:05:15 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-io1-f48.google.com (mail-io1-f48.google.com [209.85.166.48]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4E0FC689AC1 for ; Fri, 15 Mar 2019 01:05:08 +0200 (EET) Received: by mail-io1-f48.google.com with SMTP id x7so6679701ioh.4 for ; Thu, 14 Mar 2019 16:05:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=kCafoSw1lzSFC46/hBrHpfFQgOklG8ZPmRTpO8cZh/k=; b=kQDKnjmfTia//CmMtOgcWkCZzm3nGa0Jw7XL1MsbE2pmeQubozsIT/VjtGcOCUaaB7 WFmCU/FePvF5u6GobS8fhkqD9zKgfz5p7KI8ph+ajjlFYGVsmrCA7JD2h8SnoqKgNZs4 5m48kN6UAPcen5b/8L9k4FqHd15ahNp8miduHldqTznuf4yBdBrLqOYgahI7kCzeBwWt IO9PrEjOlCVSrSIBbixrM7uzR5deOr0gsN9gDeuK71ePs1M3kY13Hq/rkdfb6Lh9EtCB dCXeg2OHeaAahEOORQUnRf/ltInEclzTxv1wPPYBmcrjFiZ1bl9EJXg6z+bhuJ/j6wel 3IkQ== 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=kCafoSw1lzSFC46/hBrHpfFQgOklG8ZPmRTpO8cZh/k=; b=GypXBRKrhfJ21xH0R3KPe99wWOrrutDN6d9KWzrxbfZE4wl8qV8Oq7J7Uzc69LEFk1 8dVm6J8cnBNSCsB9sTEbK1l3/X+1YWHhKnV/0d5ur+0Yk1llVWCQ7+38NPif+WNyEVUy 8WT9m77xQuu6nOYj99j3PFw1x3Fu3yQAbCJv2SgXqPsXRjv1v4C2A72lUPZu1ntXiQLO R/ubDu/UWUPg1fHF8xa3puHgBTPIQ3SHh8i30Q6V0seG6qY1B/J/XU0qU17RhamZRhR7 mpQPU0Wslgk24Adq/UdhcTXOt0Ac+2xX6mV7SIWSOd44oq8o8Woy4IEDtw4uYypeyHX9 Dv2g== X-Gm-Message-State: APjAAAWL4QfhoyAc0/lW/XWPtIbesgrEOMLfm522UhZFNZcaS0irkIkl Fx1tWHb6WmSqULdEGtLQL9R6hIEGL2/vZHG62tpuRA== X-Google-Smtp-Source: APXvYqzGFarNhjxTzz+iCxcWpbS1pThSv00SAs6cGkzPCVcLg4q0oh8hghDNDJSNRWQVoLIbVB9GOVurrRdZ3vMJ2Mc= X-Received: by 2002:a5d:9455:: with SMTP id x21mr365381ior.250.1552604706803; Thu, 14 Mar 2019 16:05:06 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a02:fca:0:0:0:0:0 with HTTP; Thu, 14 Mar 2019 16:05:05 -0700 (PDT) From: Carl Eugen Hoyos Date: Fri, 15 Mar 2019 00:05:05 +0100 Message-ID: To: FFmpeg development discussions and patches Subject: [FFmpeg-devel] [PATCH]lavc/qtrle: Do not use aligned writes for odd addresses. 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" Hi! Attached patch fixes the qtrle crash on sparc for me. Please comment, Carl Eugen From a94d32d63cff248d2eb633b162e9e4d4f7234ee5 Mon Sep 17 00:00:00 2001 From: Carl Eugen Hoyos Date: Fri, 15 Mar 2019 00:02:48 +0100 Subject: [PATCH] lavc/qtrle: Do not used aligned writes for odd addresses. pixel_ptr can be 3. Fixes crashes on systems that do not allow unaligned access. --- libavcodec/qtrle.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/libavcodec/qtrle.c b/libavcodec/qtrle.c index a744d7b..1351532 100644 --- a/libavcodec/qtrle.c +++ b/libavcodec/qtrle.c @@ -325,7 +325,7 @@ static void qtrle_decode_24bpp(QtrleContext *s, int row_ptr, int lines_to_change CHECK_PIXEL_PTR(rle_code * 3); while (rle_code--) { - AV_WN16A(rgb + pixel_ptr, rg); + AV_WN16(rgb + pixel_ptr, rg); rgb[pixel_ptr + 2] = b; pixel_ptr += 3; } @@ -335,13 +335,13 @@ static void qtrle_decode_24bpp(QtrleContext *s, int row_ptr, int lines_to_change rle_code_half = rle_code / 2; while (rle_code_half--) { /* copy 2 raw rgb value at the same time */ - AV_WN32A(rgb + pixel_ptr, bytestream2_get_ne32(&s->g)); /* rgbr */ - AV_WN16A(rgb + pixel_ptr + 4, bytestream2_get_ne16(&s->g)); /* rgbr */ + AV_WN32(rgb + pixel_ptr, bytestream2_get_ne32(&s->g)); /* rgbr */ + AV_WN16(rgb + pixel_ptr + 4, bytestream2_get_ne16(&s->g)); /* rgbr */ pixel_ptr += 6; } if (rle_code % 2 != 0){ /* not even raw value */ - AV_WN16A(rgb + pixel_ptr, bytestream2_get_ne16(&s->g)); + AV_WN16(rgb + pixel_ptr, bytestream2_get_ne16(&s->g)); rgb[pixel_ptr + 2] = bytestream2_get_byte(&s->g); pixel_ptr += 3; } @@ -379,7 +379,7 @@ static void qtrle_decode_32bpp(QtrleContext *s, int row_ptr, int lines_to_change CHECK_PIXEL_PTR(rle_code * 4); while (rle_code--) { - AV_WN32A(rgb + pixel_ptr, argb); + AV_WN32(rgb + pixel_ptr, argb); pixel_ptr += 4; } } else { @@ -388,12 +388,12 @@ static void qtrle_decode_32bpp(QtrleContext *s, int row_ptr, int lines_to_change /* copy pixels directly to output */ rle_code_half = rle_code / 2; while (rle_code_half--) { /* copy 2 argb raw value at the same time */ - AV_WN64A(rgb + pixel_ptr, bytestream2_get_ne64(&s->g)); + AV_WN64(rgb + pixel_ptr, bytestream2_get_ne64(&s->g)); pixel_ptr += 8; } if (rle_code % 2 != 0){ /* not even raw value */ - AV_WN32A(rgb + pixel_ptr, bytestream2_get_ne32(&s->g)); + AV_WN32(rgb + pixel_ptr, bytestream2_get_ne32(&s->g)); pixel_ptr += 4; } } -- 1.7.10.4