summaryrefslogtreecommitdiffstats
path: root/ossfuzz/fuzz_data_producer.c
diff options
context:
space:
mode:
authorbimbashrestha <bshrestha.msae@gmail.com>2019-08-16 23:43:28 (GMT)
committerbimbashrestha <bshrestha.msae@gmail.com>2019-08-16 23:43:28 (GMT)
commitf839e9fe8a393117c64dff58196d36b741780ab0 (patch)
tree8e631d375b6b734bd2e8f8385b5e289862a4f3b3 /ossfuzz/fuzz_data_producer.c
parenta9ac05645644a0615b558f6ac655c4ae46c4a926 (diff)
downloadlz4-f839e9fe8a393117c64dff58196d36b741780ab0.zip
lz4-f839e9fe8a393117c64dff58196d36b741780ab0.tar.gz
lz4-f839e9fe8a393117c64dff58196d36b741780ab0.tar.bz2
Seperating fuzz data producer api impl and header, using data producer on the easy fuzzers
Diffstat (limited to 'ossfuzz/fuzz_data_producer.c')
-rw-r--r--ossfuzz/fuzz_data_producer.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/ossfuzz/fuzz_data_producer.c b/ossfuzz/fuzz_data_producer.c
new file mode 100644
index 0000000..ae07575
--- /dev/null
+++ b/ossfuzz/fuzz_data_producer.c
@@ -0,0 +1,32 @@
+#include "fuzz_data_producer.h"
+
+FUZZ_dataProducer_t *FUZZ_dataProducer_create(const uint8_t *data, size_t size) {
+ FUZZ_dataProducer_t *producer = malloc(sizeof(FUZZ_dataProducer_t));
+ producer->data = data;
+ producer->size = size;
+ return producer;
+}
+
+void FUZZ_dataProducer_free(FUZZ_dataProducer_t *producer) { free(producer); }
+
+uint32_t FUZZ_dataProducer_uint32(FUZZ_dataProducer_t *producer, uint32_t min,
+ uint32_t max) {
+ FUZZ_ASSERT(min <= max);
+
+ uint32_t range = max - min;
+ uint32_t rolling = range;
+ uint32_t result = 0;
+
+ while (rolling > 0 && producer->size > 0) {
+ uint8_t next = *(producer->data + producer->size - 1);
+ producer->size -= 1;
+ result = (result << 8) | next;
+ rolling >>= 8;
+ }
+
+ if (range == 0xffffffff) {
+ return result;
+ }
+
+ return min + result % (range + 1);
+}