1cb93a386Sopenharmony_ci/* 2cb93a386Sopenharmony_ci * Copyright 2014 Google Inc. 3cb93a386Sopenharmony_ci * 4cb93a386Sopenharmony_ci * Use of this source code is governed by a BSD-style license that can be 5cb93a386Sopenharmony_ci * found in the LICENSE file. 6cb93a386Sopenharmony_ci */ 7cb93a386Sopenharmony_ci 8cb93a386Sopenharmony_ci#include "include/codec/SkCodec.h" 9cb93a386Sopenharmony_ci#include "include/core/SkBitmap.h" 10cb93a386Sopenharmony_ci#include "include/core/SkStream.h" 11cb93a386Sopenharmony_ci#include "include/core/SkString.h" 12cb93a386Sopenharmony_ci#include "include/core/SkTypes.h" 13cb93a386Sopenharmony_ci#include "src/utils/SkOSPath.h" 14cb93a386Sopenharmony_ci#include "tests/Test.h" 15cb93a386Sopenharmony_ci#include "tools/Resources.h" 16cb93a386Sopenharmony_ci 17cb93a386Sopenharmony_ci#include <memory> 18cb93a386Sopenharmony_ci#include <utility> 19cb93a386Sopenharmony_ci 20cb93a386Sopenharmony_ciDEF_TEST(BadImage, reporter) { 21cb93a386Sopenharmony_ci const char* const badImages [] = { 22cb93a386Sopenharmony_ci "sigabort_favicon.ico", 23cb93a386Sopenharmony_ci "sigsegv_favicon.ico", 24cb93a386Sopenharmony_ci "sigsegv_favicon_2.ico", 25cb93a386Sopenharmony_ci "ico_leak01.ico", 26cb93a386Sopenharmony_ci "ico_fuzz0.ico", 27cb93a386Sopenharmony_ci "ico_fuzz1.ico", 28cb93a386Sopenharmony_ci "skbug3442.webp", 29cb93a386Sopenharmony_ci "skbug3429.webp", 30cb93a386Sopenharmony_ci "b38116746.ico", 31cb93a386Sopenharmony_ci "skbug5883.gif", 32cb93a386Sopenharmony_ci }; 33cb93a386Sopenharmony_ci 34cb93a386Sopenharmony_ci const char* badImagesFolder = "invalid_images"; 35cb93a386Sopenharmony_ci 36cb93a386Sopenharmony_ci for (size_t i = 0; i < SK_ARRAY_COUNT(badImages); ++i) { 37cb93a386Sopenharmony_ci SkString resourcePath = SkOSPath::Join(badImagesFolder, badImages[i]); 38cb93a386Sopenharmony_ci std::unique_ptr<SkStream> stream(GetResourceAsStream(resourcePath.c_str())); 39cb93a386Sopenharmony_ci std::unique_ptr<SkCodec> codec(SkCodec::MakeFromStream(std::move(stream))); 40cb93a386Sopenharmony_ci 41cb93a386Sopenharmony_ci // These images are corrupt. It's not important whether we succeed/fail in codec 42cb93a386Sopenharmony_ci // creation or decoding. We just want to make sure that we don't crash. 43cb93a386Sopenharmony_ci if (codec) { 44cb93a386Sopenharmony_ci SkBitmap bm; 45cb93a386Sopenharmony_ci bm.allocPixels(codec->getInfo()); 46cb93a386Sopenharmony_ci codec->getPixels(codec->getInfo(), bm.getPixels(), 47cb93a386Sopenharmony_ci bm.rowBytes()); 48cb93a386Sopenharmony_ci } 49cb93a386Sopenharmony_ci } 50cb93a386Sopenharmony_ci} 51