Add Chromium's fuzz_fileter_fuzz to skia.

Move the fuzzer in
chromium/src/skia/tools/filter_fuzz_stub/filter_fuzz_stub.cc
to Skia's fuzzer.

I recommend removing filter_fuzz_stub from chromium and only
using Skia's fuzzer.

BUG=chromium:700836

Change-Id: Ibab1a9b696e54a3042ee61f5524d196c12df2888
Reviewed-on: https://skia-review.googlesource.com/9802
Commit-Queue: Herb Derby <herb@google.com>
Reviewed-by: Kevin Lubick <kjlubick@google.com>
diff --git a/fuzz/fuzz.cpp b/fuzz/fuzz.cpp
index ea385ad..d156680 100644
--- a/fuzz/fuzz.cpp
+++ b/fuzz/fuzz.cpp
@@ -10,11 +10,14 @@
 #include "SkCodec.h"
 #include "SkCommandLineFlags.h"
 #include "SkData.h"
+#include "SkFlattenableSerialization.h"
 #include "SkImage.h"
 #include "SkImageEncoder.h"
+#include "SkImageFilter.h"
 #include "SkMallocPixelRef.h"
 #include "SkOSFile.h"
 #include "SkOSPath.h"
+#include "SkPaint.h"
 #include "SkPath.h"
 #include "SkPicture.h"
 #include "SkRegion.h"
@@ -55,6 +58,8 @@
 static void fuzz_path_deserialize(sk_sp<SkData>);
 static void fuzz_region_deserialize(sk_sp<SkData>);
 static void fuzz_skp(sk_sp<SkData>);
+static void fuzz_filter_fuzz(sk_sp<SkData>);
+
 #if SK_SUPPORT_GPU
 static void fuzz_sksl2glsl(sk_sp<SkData>);
 #endif
@@ -122,6 +127,10 @@
             fuzz_skp(bytes);
             return 0;
         }
+        if (0 == strcmp("filter_fuzz", FLAGS_type[0])) {
+            fuzz_filter_fuzz(bytes);
+            return 0;
+        }
 #if SK_SUPPORT_GPU
         if (0 == strcmp("sksl2glsl", FLAGS_type[0])) {
             fuzz_sksl2glsl(bytes);
@@ -512,6 +521,40 @@
     SkDebugf("[terminated] Success! Initialized SkRegion.\n");
 }
 
+static void fuzz_filter_fuzz(sk_sp<SkData> bytes) {
+
+    const int BitmapSize = 24;
+    SkBitmap bitmap;
+    bitmap.allocN32Pixels(BitmapSize, BitmapSize);
+    SkCanvas canvas(bitmap);
+    canvas.clear(0x00000000);
+
+    sk_sp<SkImageFilter> flattenable = SkValidatingDeserializeImageFilter(
+        bytes->data(), bytes->size());
+
+    // Adding some info, but the test passed if we got here without any trouble
+    if (flattenable != NULL) {
+        SkDebugf("Valid stream detected.\n");
+        // Let's see if using the filters can cause any trouble...
+        SkPaint paint;
+        paint.setImageFilter(flattenable);
+        canvas.save();
+        canvas.clipRect(SkRect::MakeXYWH(
+            0, 0, SkIntToScalar(BitmapSize), SkIntToScalar(BitmapSize)));
+
+        // This call shouldn't crash or cause ASAN to flag any memory issues
+        // If nothing bad happens within this call, everything is fine
+        canvas.drawBitmap(bitmap, 0, 0, &paint);
+
+        SkDebugf("Filter DAG rendered successfully\n");
+        canvas.restore();
+    } else {
+        SkDebugf("Invalid stream detected.\n");
+    }
+
+    SkDebugf("[terminated] Done\n");
+}
+
 #if SK_SUPPORT_GPU
 static void fuzz_sksl2glsl(sk_sp<SkData> bytes) {
     SkSL::Compiler compiler;