blob: 7a56a00036a4af2b7a6d8e0984c025534994969b [file] [log] [blame]
/*
* Copyright 2025 Google LLC.
*
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "include/core/SkBitmap.h"
#include "include/core/SkData.h"
#include "include/core/SkStream.h"
#include "experimental/rust_bmp/decoder/SkBmpRustDecoder.h"
bool FuzzBMPRustDecoder(const uint8_t* data, size_t size) {
if (size == 0) {
return false;
}
auto stream = std::make_unique<SkMemoryStream>(data, size, false);
SkCodec::Result result;
std::unique_ptr<SkCodec> codec = SkBmpRustDecoder::Decode(std::move(stream), &result);
if (!codec || result != SkCodec::kSuccess) {
return false;
}
SkImageInfo info = codec->getInfo();
SkBitmap bitmap;
if (!bitmap.tryAllocPixels(info)) {
return false;
}
// Attempt to decode the image
(void)codec->getPixels(info, bitmap.getPixels(), bitmap.rowBytes());
// We don't care if the decode succeeds or fails - we just want to make sure it doesn't crash
return true;
}
#if defined(SK_BUILD_FOR_LIBFUZZER)
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
// Limit input size to prevent timeouts
if (size > 10240) {
return 0;
}
FuzzBMPRustDecoder(data, size);
return 0;
}
#endif