From 25bacd0a0c32ae682e6f411b1ac9020aeaabca72 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Martin=20Storsj=C3=B6?= Date: Thu, 28 Jul 2016 13:10:22 +0300 Subject: [PATCH] Don't use expressions with side effects in macro parameters MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit AV_WB32 can be implemented as a macro that expands its parameters multiple times (in case AV_HAVE_FAST_UNALIGNED isn't set and the compiler doesn't support GCC attributes); make sure not to read multiple times from the source in this case. Signed-off-by: Martin Storsjö --- libavcodec/dxv.c | 18 ++++++++++++------ libavformat/xmv.c | 6 ++++-- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/libavcodec/dxv.c b/libavcodec/dxv.c index 99327dface..39b297a235 100644 --- a/libavcodec/dxv.c +++ b/libavcodec/dxv.c @@ -121,8 +121,10 @@ static int dxv_decompress_dxt1(AVCodecContext *avctx) int pos = 2; /* Copy the first two elements */ - AV_WL32(ctx->tex_data, bytestream2_get_le32(gbc)); - AV_WL32(ctx->tex_data + 4, bytestream2_get_le32(gbc)); + value = bytestream2_get_le32(gbc); + AV_WL32(ctx->tex_data, value); + value = bytestream2_get_le32(gbc); + AV_WL32(ctx->tex_data + 4, value); /* Process input until the whole texture has been filled */ while (pos + 2 <= ctx->tex_size / 4) { @@ -172,10 +174,14 @@ static int dxv_decompress_dxt5(AVCodecContext *avctx) int probe, check; /* Copy the first four elements */ - AV_WL32(ctx->tex_data + 0, bytestream2_get_le32(gbc)); - AV_WL32(ctx->tex_data + 4, bytestream2_get_le32(gbc)); - AV_WL32(ctx->tex_data + 8, bytestream2_get_le32(gbc)); - AV_WL32(ctx->tex_data + 12, bytestream2_get_le32(gbc)); + value = bytestream2_get_le32(gbc); + AV_WL32(ctx->tex_data + 0, value); + value = bytestream2_get_le32(gbc); + AV_WL32(ctx->tex_data + 4, value); + value = bytestream2_get_le32(gbc); + AV_WL32(ctx->tex_data + 8, value); + value = bytestream2_get_le32(gbc); + AV_WL32(ctx->tex_data + 12, value); /* Process input until the whole texture has been filled */ while (pos + 2 <= ctx->tex_size / 4) { diff --git a/libavformat/xmv.c b/libavformat/xmv.c index b2112b0e95..fa391560f0 100644 --- a/libavformat/xmv.c +++ b/libavformat/xmv.c @@ -512,8 +512,10 @@ static int xmv_fetch_video_packet(AVFormatContext *s, * WMV2 is little-endian. * TODO: This manual swap is of course suboptimal. */ - for (i = 0; i < frame_size; i += 4) - AV_WB32(pkt->data + i, avio_rl32(pb)); + for (i = 0; i < frame_size; i += 4) { + uint32_t val = avio_rl32(pb); + AV_WB32(pkt->data + i, val); + } pkt->stream_index = video->stream_index; -- 2.11.0