Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | |
|
robertphillips
2015/05/12 15:34:17
Does this header need to change?
| |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "SkCanvas.h" | |
| 6 #include "SkFlattenableSerialization.h" | |
| 7 #include "SkImageFilter.h" | |
| 8 #include "SkOSFile.h" | |
| 9 #include "SkString.h" | |
| 10 | |
| 11 static const int kBitmapSize = 24; | |
| 12 | |
| 13 static bool read_test_case(const char* filename, SkString* testdata) { | |
| 14 SkFILE* file = sk_fopen(filename, kRead_SkFILE_Flag); | |
| 15 if (!file) { | |
| 16 SkDebugf("couldn't open file %s\n", filename); | |
| 17 return false; | |
| 18 } | |
| 19 size_t len = sk_fgetsize(file); | |
| 20 if (!len) { | |
| 21 SkDebugf("couldn't read file %s\n", filename); | |
| 22 return false; | |
| 23 } | |
| 24 testdata->resize(len); | |
| 25 (void) sk_fread(testdata->writable_str(), len, file); | |
| 26 return true; | |
| 27 } | |
| 28 | |
| 29 static void run_test_case(const SkString& testdata, const SkBitmap& bitmap, | |
| 30 SkCanvas* canvas) { | |
| 31 // This call shouldn't crash or cause ASAN to flag any memory issues | |
| 32 // If nothing bad happens within this call, everything is fine | |
| 33 SkFlattenable* flattenable = SkValidatingDeserializeFlattenable( | |
| 34 testdata.c_str(), testdata.size(), SkImageFilter::GetFlattenableType()); | |
| 35 | |
| 36 // Adding some info, but the test passed if we got here without any trouble | |
| 37 if (flattenable != NULL) { | |
| 38 SkDebugf("Valid stream detected.\n"); | |
| 39 // Let's see if using the filters can cause any trouble... | |
| 40 SkPaint paint; | |
| 41 paint.setImageFilter(static_cast<SkImageFilter*>(flattenable))->unref(); | |
| 42 canvas->save(); | |
| 43 canvas->clipRect(SkRect::MakeXYWH( | |
| 44 0, 0, SkIntToScalar(kBitmapSize), SkIntToScalar(kBitmapSize))); | |
| 45 | |
| 46 // This call shouldn't crash or cause ASAN to flag any memory issues | |
| 47 // If nothing bad happens within this call, everything is fine | |
| 48 canvas->drawBitmap(bitmap, 0, 0, &paint); | |
| 49 | |
| 50 SkDebugf("Filter DAG rendered successfully.\n"); | |
| 51 canvas->restore(); | |
| 52 } else { | |
| 53 SkDebugf("Invalid stream detected.\n"); | |
| 54 } | |
| 55 } | |
| 56 | |
| 57 static bool read_and_run_test_case(const char* filename, const SkBitmap& bitmap, | |
| 58 SkCanvas* canvas) { | |
| 59 SkString testdata; | |
| 60 SkDebugf("Test case: %s\n", filename); | |
| 61 // read_test_case will print a useful error message if it fails. | |
| 62 if (!read_test_case(filename, &testdata)) | |
| 63 return false; | |
| 64 run_test_case(testdata, bitmap, canvas); | |
| 65 return true; | |
| 66 } | |
| 67 | |
| 68 int main(int argc, char** argv) { | |
| 69 int ret = 0; | |
| 70 SkBitmap bitmap; | |
| 71 bitmap.allocN32Pixels(kBitmapSize, kBitmapSize); | |
| 72 SkCanvas canvas(bitmap); | |
| 73 canvas.clear(0x00000000); | |
| 74 for (int i = 1; i < argc; i++) | |
| 75 if (!read_and_run_test_case(argv[i], bitmap, &canvas)) | |
| 76 ret = 2; | |
| 77 // Cluster-Fuzz likes "#EOF" as the last line of output to help distinguish | |
| 78 // successful runs from crashes. | |
| 79 SkDebugf("#EOF\n"); | |
| 80 return ret; | |
| 81 } | |
| 82 | |
| OLD | NEW |