From b281539ba96d4563227984fa49c7c94383e4259a Mon Sep 17 00:00:00 2001 From: Frank Barchard Date: Fri, 14 Apr 2017 16:50:39 -0700 Subject: crash fix for I420ToRGB565 To reproduce with the unittest (not included in this CL): out/Release/libyuv_unittest --gtest_filter=*Convert*I*To* --libyuv_width=1280 --libyuv_height=720 [ RUN ] LibYUVConvertTest.I420ToRGB24_Opt [ OK ] LibYUVConvertTest.I420ToRGB24_Opt (585 ms) [ RUN ] LibYUVConvertTest.I420ToRGB565_Any /Users/fbarchard/bin/runyuv10: line 2: 9424 Segmentation fault: 11 Happens when running with Intel with AVX2 on odd width image. Odd widths are uncommon, and AVX2 is not common on mobile, so doesnt occur much. This function is used by stagefright. The change calls a function with a larger alignment value, indicating the AVX2 should do multiple of 16 pixels with AVX2, and use C code to handle the remainder. Previously the function was passed too small of an alignment value, so the AVX2 would overwrite memory. e.g if it were called with 9 pixels, it would convert 16. Bug: 37328100 Test: out/Release/libyuv_unittest --gtest_filter=*Convert*I*To* --libyuv_width=1280 --libyuv_height=720 Change-Id: If56113527084256e2c2092938bf573722b16f0df --- files/source/row_any.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/files/source/row_any.cc b/files/source/row_any.cc index af5d1fbc..88c2cf13 100644 --- a/files/source/row_any.cc +++ b/files/source/row_any.cc @@ -158,13 +158,13 @@ ANY31C(I422ToRGBARow_Any_AVX2, I422ToRGBARow_AVX2, 1, 0, 4, 15) ANY31C(I444ToARGBRow_Any_AVX2, I444ToARGBRow_AVX2, 0, 0, 4, 15) #endif #ifdef HAS_I422TOARGB4444ROW_AVX2 -ANY31C(I422ToARGB4444Row_Any_AVX2, I422ToARGB4444Row_AVX2, 1, 0, 2, 7) +ANY31C(I422ToARGB4444Row_Any_AVX2, I422ToARGB4444Row_AVX2, 1, 0, 2, 15) #endif #ifdef HAS_I422TOARGB1555ROW_AVX2 -ANY31C(I422ToARGB1555Row_Any_AVX2, I422ToARGB1555Row_AVX2, 1, 0, 2, 7) +ANY31C(I422ToARGB1555Row_Any_AVX2, I422ToARGB1555Row_AVX2, 1, 0, 2, 15) #endif #ifdef HAS_I422TORGB565ROW_AVX2 -ANY31C(I422ToRGB565Row_Any_AVX2, I422ToRGB565Row_AVX2, 1, 0, 2, 7) +ANY31C(I422ToRGB565Row_Any_AVX2, I422ToRGB565Row_AVX2, 1, 0, 2, 15) #endif #ifdef HAS_I422TOARGBROW_NEON ANY31C(I444ToARGBRow_Any_NEON, I444ToARGBRow_NEON, 0, 0, 4, 7) -- cgit v1.2.3