Correctly handle empty outer blurs.

Most blur styles approach the original mask as the sigma goes to zero.
The outer style however approaches nothing as the mask sigma goes to
zero. Handle this case correctly.

Change-Id: I14f76e144d7cfc78aeaff30ff5444a21f1e5f98b
Reviewed-on: https://skia-review.googlesource.com/128006
Commit-Queue: Ben Wagner <bungeman@google.com>
Reviewed-by: Kevin Lubick <kjlubick@google.com>
diff --git a/src/core/SkBlurMask.cpp b/src/core/SkBlurMask.cpp
index f4fa100..0e0d261 100644
--- a/src/core/SkBlurMask.cpp
+++ b/src/core/SkBlurMask.cpp
@@ -110,9 +110,17 @@
         return false;
     }
 
-
     SkMaskBlurFilter blurFilter{sigma, sigma};
-    if (blurFilter.hasNoBlur() && style != kOuter_SkBlurStyle) {
+    if (blurFilter.hasNoBlur()) {
+        // If there is no effective blur most styles will just produce the original mask.
+        // However, kOuter_SkBlurStyle will produce an empty mask.
+        if (style == kOuter_SkBlurStyle) {
+            dst->fImage = nullptr;
+            dst->fBounds = SkIRect::MakeEmpty();
+            dst->fRowBytes = dst->fBounds.width();
+            dst->fFormat = SkMask::kA8_Format;
+            return true;
+        }
         return false;
     }
     const SkIPoint border = blurFilter.blur(src, dst);
diff --git a/src/core/SkMaskBlurFilter.cpp b/src/core/SkMaskBlurFilter.cpp
index 7674bdd..ea3d8ab 100644
--- a/src/core/SkMaskBlurFilter.cpp
+++ b/src/core/SkMaskBlurFilter.cpp
@@ -882,8 +882,9 @@
 }
 
 static SkIPoint small_blur(double sigmaX, double sigmaY, const SkMask& src, SkMask* dst) {
-    SkASSERT(0 <= sigmaX && sigmaX < 2);
-    SkASSERT(0 <= sigmaY && sigmaY < 2);
+    SkASSERT(sigmaX == sigmaY); // TODO
+    SkASSERT(0.01 <= sigmaX && sigmaX < 2);
+    SkASSERT(0.01 <= sigmaY && sigmaY < 2);
 
     SkGaussFilter filterX{sigmaX, SkGaussFilter::Type::Bessel},
                   filterY{sigmaY, SkGaussFilter::Type::Bessel};