summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2024-06-11 10:30:27 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2024-06-11 10:30:27 +0000
commitd07f45a2fa2c8f602eb09cd924ad57ad49c19dd2 (patch)
tree222f575560b814a76258c4907b8e2d6fcca36587
parent6997f294fc738eded08a07a40d3109056391a236 (diff)
parentcb209bedaf179585d35ed82d420f0f166c71e2bd (diff)
Merge "Create decoder using fd and buffer" into main am: d860f08a1e am: cb209bedaf
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/3079508 Change-Id: Iedef6148a7cc2c3db6f04f4a3712e90cbeb1d0a2 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
-rw-r--r--native/graphics/jni/fuzz/fuzz_imagedecoder.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/native/graphics/jni/fuzz/fuzz_imagedecoder.cpp b/native/graphics/jni/fuzz/fuzz_imagedecoder.cpp
index 886f3075df72..6743997fb152 100644
--- a/native/graphics/jni/fuzz/fuzz_imagedecoder.cpp
+++ b/native/graphics/jni/fuzz/fuzz_imagedecoder.cpp
@@ -31,6 +31,20 @@ struct PixelFreer {
using PixelPointer = std::unique_ptr<void, PixelFreer>;
+AImageDecoder* init(const uint8_t* data, size_t size, bool useFileDescriptor) {
+ AImageDecoder* decoder = nullptr;
+ if (useFileDescriptor) {
+ constexpr char testFd[] = "tempFd";
+ int32_t fileDesc = open(testFd, O_RDWR | O_CREAT | O_TRUNC);
+ write(fileDesc, data, size);
+ AImageDecoder_createFromFd(fileDesc, &decoder);
+ close(fileDesc);
+ } else {
+ AImageDecoder_createFromBuffer(data, size, &decoder);
+ }
+ return decoder;
+}
+
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
FuzzedDataProvider dataProvider = FuzzedDataProvider(data, size);
/**
@@ -39,8 +53,8 @@ extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
*/
const int32_t dataSize = dataProvider.ConsumeIntegralInRange<int32_t>(0, (size * 80) / 100);
std::vector<uint8_t> inputBuffer = dataProvider.ConsumeBytes<uint8_t>(dataSize);
- AImageDecoder* decoder = nullptr;
- AImageDecoder_createFromBuffer(inputBuffer.data(), inputBuffer.size(), &decoder);
+ AImageDecoder* decoder =
+ init(inputBuffer.data(), inputBuffer.size(), dataProvider.ConsumeBool());
if (!decoder) {
return 0;
}