From 21b4b5e2be9281cc11ab7ccc34888da8146ed1bc Mon Sep 17 00:00:00 2001
From: Frank Bossen <fbossen@gmail.com>
Date: Thu, 8 Aug 2019 18:26:55 -0400
Subject: [PATCH] Fix issue reported by address sanitizer

Read 32 bits instead of 64 bits for blocks of width 2 such as to
not read past array boundaries
---
 source/Lib/CommonLib/x86/InterpolationFilterX86.h | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/source/Lib/CommonLib/x86/InterpolationFilterX86.h b/source/Lib/CommonLib/x86/InterpolationFilterX86.h
index 9363438b69..0d7421f2ab 100644
--- a/source/Lib/CommonLib/x86/InterpolationFilterX86.h
+++ b/source/Lib/CommonLib/x86/InterpolationFilterX86.h
@@ -1249,17 +1249,19 @@ void xWeightedTriangleBlk_SSE(const PredictionUnit &pu, const uint32_t width, co
   {
     for (int y = 0; y < height; y++)
     {
-      __m128i s0 = _mm_loadl_epi64((__m128i *) (src0));
-      __m128i s1 = _mm_loadl_epi64((__m128i *) (src1));
-      __m128i w0 = _mm_loadl_epi64((__m128i *) (weight));
+      __m128i s0 = _mm_cvtsi32_si128(*(uint32_t *) src0);
+      __m128i s1 = _mm_cvtsi32_si128(*(uint32_t *) src1);
+      __m128i w0 = _mm_cvtsi32_si128(*(uint32_t *) weight);
       __m128i w1 = _mm_sub_epi16(mmEight, w0);
+
       s0 = _mm_unpacklo_epi16(s0, s1);
       w0 = _mm_unpacklo_epi16(w0, w1);
       s0 = _mm_add_epi32(_mm_madd_epi16(s0, w0), mmOffset);
       s0 = _mm_sra_epi32(s0, mmShift);
       s0 = _mm_packs_epi32(s0, s0);
       s0 = _mm_min_epi16(mmMax, _mm_max_epi16(s0, mmMin));
-      *(int*)(dst) = _mm_cvtsi128_si32(s0);
+
+      *(uint32_t *) dst = _mm_cvtsi128_si32(s0);
       dst += strideDst;
       src0 += strideSrc0;
       src1 += strideSrc1;
-- 
GitLab