Commit 3cdbbdaaa8 for ffmpeg
commit 3cdbbdaaa8205b2c25fecf3a2eb168757e050535
Author: Marvin Scholz <epirat07@gmail.com>
Date: Thu Oct 29 22:33:46 2026 +0000
avcodec/4xm: fix unaligned access
Using bswap_buf on unaligned bitstream chunk from packet directly is
undefined behavior. Copy to bitstream_buffer first which is fully
aligned.
Signed-off-by: Marvin Scholz <epirat07@gmail.com>
diff --git a/libavcodec/4xm.c b/libavcodec/4xm.c
index c6b2ce1230..78bc390809 100644
--- a/libavcodec/4xm.c
+++ b/libavcodec/4xm.c
@@ -469,7 +469,8 @@ static int decode_p_frame(FourXContext *f, const uint8_t *buf, int length)
bitstream_size);
if (!f->bitstream_buffer)
return AVERROR(ENOMEM);
- f->bbdsp.bswap_buf(f->bitstream_buffer, (const uint32_t *) (buf + extra),
+ memcpy(f->bitstream_buffer, buf + extra, bitstream_size);
+ f->bbdsp.bswap_buf(f->bitstream_buffer, f->bitstream_buffer,
bitstream_size / 4);
init_get_bits(&f->gb, f->bitstream_buffer, 8 * bitstream_size);
@@ -813,7 +814,8 @@ static int decode_i_frame(FourXContext *f, const uint8_t *buf, int length)
prestream_size);
if (!f->bitstream_buffer)
return AVERROR(ENOMEM);
- f->bbdsp.bswap_buf(f->bitstream_buffer, (const uint32_t *) prestream,
+ memcpy(f->bitstream_buffer, prestream, prestream_size);
+ f->bbdsp.bswap_buf(f->bitstream_buffer, f->bitstream_buffer,
prestream_size / 4);
init_get_bits(&f->pre_gb, f->bitstream_buffer, 8 * prestream_size);