check for null native objects, which never happens on a real subclass (we throw in that case)
but can happen because we allow the callers to create the base class from java.
diff --git a/core/jni/android/graphics/MaskFilter.cpp b/core/jni/android/graphics/MaskFilter.cpp
index e6048cd..05a6d47 100644
--- a/core/jni/android/graphics/MaskFilter.cpp
+++ b/core/jni/android/graphics/MaskFilter.cpp
@@ -4,15 +4,23 @@
 
 #include <jni.h>
 
+static void ThrowIAE_IfNull(JNIEnv* env, void* ptr) {
+    if (NULL == ptr) {
+        doThrowIAE(env);
+    }
+}
+
 class SkMaskFilterGlue {
 public:
     static void destructor(JNIEnv* env, jobject, SkMaskFilter* filter) {
-        SkASSERT(filter);
-        filter->unref();
+        SkSafeUnref(filter);
     }
 
     static SkMaskFilter* createBlur(JNIEnv* env, jobject, float radius, int blurStyle) {
-        return SkBlurMaskFilter::Create(SkFloatToScalar(radius), (SkBlurMaskFilter::BlurStyle)blurStyle);
+        SkMaskFilter* filter = SkBlurMaskFilter::Create(SkFloatToScalar(radius),
+                                        (SkBlurMaskFilter::BlurStyle)blurStyle);
+        ThrowIAE_IfNull(env, filter);
+        return filter;
     }
  
     static SkMaskFilter* createEmboss(JNIEnv* env, jobject, jfloatArray dirArray, float ambient, float specular, float radius) {
@@ -24,8 +32,12 @@
             direction[i] = SkFloatToScalar(values[i]);
         }
 
-        return SkBlurMaskFilter::CreateEmboss(direction, SkFloatToScalar(ambient),
-                                              SkFloatToScalar(specular), SkFloatToScalar(radius));
+        SkMaskFilter* filter =  SkBlurMaskFilter::CreateEmboss(direction,
+                                                      SkFloatToScalar(ambient),
+                                                      SkFloatToScalar(specular),
+                                                      SkFloatToScalar(radius));
+        ThrowIAE_IfNull(env, filter);
+        return filter;
     }
 };