summaryrefslogtreecommitdiff
path: root/testing
diff options
context:
space:
mode:
Diffstat (limited to 'testing')
-rw-r--r--testing/fx_string_testhelpers.h50
-rw-r--r--testing/libfuzzer/xfa_codec_fuzzer.h29
2 files changed, 52 insertions, 27 deletions
diff --git a/testing/fx_string_testhelpers.h b/testing/fx_string_testhelpers.h
index 34ac69dab4..5a269a3cf6 100644
--- a/testing/fx_string_testhelpers.h
+++ b/testing/fx_string_testhelpers.h
@@ -8,8 +8,58 @@
#include <ostream>
#include "core/fxcrt/cfx_datetime.h"
+#include "core/fxcrt/fx_stream.h"
// Output stream operator so GTEST macros work with CFX_DateTime objects.
std::ostream& operator<<(std::ostream& os, const CFX_DateTime& dt);
+class CFX_InvalidSeekableReadStream : public IFX_SeekableReadStream {
+ public:
+ template <typename T, typename... Args>
+ friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+
+ // IFX_SeekableReadStream overrides:
+ bool ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override {
+ return false;
+ }
+ FX_FILESIZE GetSize() override { return data_size_; }
+
+ private:
+ explicit CFX_InvalidSeekableReadStream(FX_FILESIZE data_size)
+ : data_size_(data_size) {}
+
+ FX_FILESIZE data_size_;
+};
+
+class CFX_BufferSeekableReadStream : public IFX_SeekableReadStream {
+ public:
+ template <typename T, typename... Args>
+ friend RetainPtr<T> pdfium::MakeRetain(Args&&... args);
+
+ // IFX_SeekableReadStream:
+ bool ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override {
+ if (offset < 0 || static_cast<size_t>(offset) >= data_size_)
+ return false;
+
+ if (static_cast<size_t>(offset) + size > data_size_)
+ size = data_size_ - static_cast<size_t>(offset);
+ if (size == 0)
+ return false;
+
+ memcpy(buffer, data_ + offset, size);
+ return true;
+ }
+
+ FX_FILESIZE GetSize() override {
+ return static_cast<FX_FILESIZE>(data_size_);
+ }
+
+ private:
+ CFX_BufferSeekableReadStream(const unsigned char* src, size_t src_size)
+ : data_(src), data_size_(src_size) {}
+
+ const unsigned char* data_;
+ size_t data_size_;
+};
+
#endif // TESTING_FX_STRING_TESTHELPERS_H_
diff --git a/testing/libfuzzer/xfa_codec_fuzzer.h b/testing/libfuzzer/xfa_codec_fuzzer.h
index 5193a8930f..a590596dcf 100644
--- a/testing/libfuzzer/xfa_codec_fuzzer.h
+++ b/testing/libfuzzer/xfa_codec_fuzzer.h
@@ -13,8 +13,8 @@
#include "core/fxcodec/codec/ccodec_progressivedecoder.h"
#include "core/fxcodec/codec/ccodec_tiffmodule.h"
#include "core/fxcodec/fx_codec.h"
-#include "core/fxcrt/fx_stream.h"
#include "core/fxge/dib/cfx_dibitmap.h"
+#include "testing/fx_string_testhelpers.h"
#include "third_party/base/ptr_util.h"
class XFACodecFuzzer {
@@ -28,7 +28,7 @@ class XFACodecFuzzer {
std::unique_ptr<CCodec_ProgressiveDecoder> decoder =
mgr->CreateProgressiveDecoder();
- auto source = pdfium::MakeRetain<Reader>(data, size);
+ auto source = pdfium::MakeRetain<CFX_BufferSeekableReadStream>(data, size);
FXCODEC_STATUS status = decoder->LoadImageInfo(source, type, nullptr, true);
if (status != FXCODEC_STATUS_FRAME_READY)
return 0;
@@ -49,31 +49,6 @@ class XFACodecFuzzer {
return 0;
}
-
- private:
- class Reader : public IFX_SeekableReadStream {
- public:
- Reader(const uint8_t* data, size_t size) : m_data(data), m_size(size) {}
- ~Reader() {}
-
- bool ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) override {
- if (offset < 0 || static_cast<size_t>(offset) >= m_size)
- return false;
- if (offset + size > m_size)
- size = m_size - offset;
- if (size == 0)
- return false;
-
- memcpy(buffer, m_data + offset, size);
- return true;
- }
-
- FX_FILESIZE GetSize() override { return static_cast<FX_FILESIZE>(m_size); }
-
- private:
- const uint8_t* const m_data;
- const size_t m_size;
- };
};
#endif // TESTING_LIBFUZZER_XFA_CODEC_FUZZER_H_