From a94d32d63cff248d2eb633b162e9e4d4f7234ee5 Mon Sep 17 00:00:00 2001
From: Carl Eugen Hoyos <ceffmpeg@gmail.com>
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(-)
@@ -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