libwebp/libwebp-fix-endian-problems-in-pattern-copy.patch

32 lines
1010 B
Diff
Raw Normal View History

2020-03-13 22:25:17 +08:00
From 667d17a8a403e0768cccf585455cf12807cd1604 Mon Sep 17 00:00:00 2001
From: Pascal Massimino <pascal.massimino@gmail.com>
Date: Mon, 9 Jul 2018 17:33:44 -0700
Subject: [PATCH] fix endian problems in pattern copy
CopyBlock8b() was over-using memcpy() of 16b values.
BUG=webp:393
Change-Id: Id56f10d334b9a453fbcf50dabfaa63529bcff7e5
(cherry picked from commit 211f37ee633aa31c37160c84cc9b868c10fbe8b9)
---
src/dec/vp8l_dec.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/dec/vp8l_dec.c b/src/dec/vp8l_dec.c
index 0570f53a7..7549cdaee 100644
--- a/src/dec/vp8l_dec.c
+++ b/src/dec/vp8l_dec.c
@@ -884,7 +884,11 @@ static WEBP_INLINE void CopyBlock8b(uint8_t* const dst, int dist, int length) {
#endif
break;
case 2:
+#if !defined(WORDS_BIGENDIAN)
memcpy(&pattern, src, sizeof(uint16_t));
+#else
+ pattern = ((uint32_t)src[0] << 8) | src[1];
+#endif
#if defined(__arm__) || defined(_M_ARM)
pattern |= pattern << 16;
#elif defined(WEBP_USE_MIPS_DSP_R2)