From 43d1cf8fd1d6128132196008cb372e47f39fe75a Mon Sep 17 00:00:00 2001 From: James Reggio Date: Tue, 21 Nov 2017 12:08:44 -0800 Subject: [PATCH] Fix crash with non-zero blurRadius less than 1 Summary: There's a crash-inducing bug with `Image.blurRadius` on Android. `blurRadius` is specified in JavaScript as a `float`, but it's cast to `int` before being passed to the `IterativeBoxBlurPostProcessor`. However, in `IterativeBoxBlurPostProcessor`, there is an argument precondition requiring the integer `blurRadius` to be non-zero. Because the `== 0` condition is evaluated on the `float`, it's possible for a `blurRadius` in the range of `(0, 1)` (non-inclusive) to pass the conditional, and then be truncated to `0` and passed as an argument to `IterativeBoxBlurPostProcessor`, which will fail its precondition and crash the app. This change works in our app, which was previously crashing. [ANDROID] [BUGFIX] [Image] Fixed crash when specifying an Image.blurRadius between (0, 1) Closes https://github.com/facebook/react-native/pull/16845 Differential Revision: D6387416 Pulled By: shergin fbshipit-source-id: d5191aa97e949ffd41e6d68c96b3c7bcbc82a52e --- .../java/com/facebook/react/views/image/ReactImageView.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.java b/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.java index 30b73bc518ed28..940ae7f1b002de 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.java @@ -229,11 +229,11 @@ public void onFailure(String id, Throwable throwable) { } public void setBlurRadius(float blurRadius) { - if (blurRadius == 0) { + int pixelBlurRadius = (int) PixelUtil.toPixelFromDIP(blurRadius); + if (pixelBlurRadius == 0) { mIterativeBoxBlurPostProcessor = null; } else { - mIterativeBoxBlurPostProcessor = - new IterativeBoxBlurPostProcessor((int) PixelUtil.toPixelFromDIP(blurRadius)); + mIterativeBoxBlurPostProcessor = new IterativeBoxBlurPostProcessor(pixelBlurRadius); } mIsDirty = true; }