summaryrefslogtreecommitdiffstats
path: root/ossfuzz/fuzz_data_producer.h
diff options
context:
space:
mode:
authorbimbashrestha <bimbashrestha@devvm1191.atn1.facebook.com>2019-08-16 17:50:46 (GMT)
committerbimbashrestha <bimbashrestha@devvm1191.atn1.facebook.com>2019-08-16 17:50:46 (GMT)
commitfad8c97532f74d92f6aa4427a739610035fcbbd1 (patch)
tree1d2dea807a17c6f08b6f7b4b65f8cf44fe4df2bf /ossfuzz/fuzz_data_producer.h
parentfdf2ef5809ca875c454510610764d9125ef2ebbd (diff)
downloadlz4-fad8c97532f74d92f6aa4427a739610035fcbbd1.zip
lz4-fad8c97532f74d92f6aa4427a739610035fcbbd1.tar.gz
lz4-fad8c97532f74d92f6aa4427a739610035fcbbd1.tar.bz2
Adding fuzz data producer for uint32 and using in decompress_fuzzer
Summary: Consuming bytes from the end of data instead of from the front to prevent "all-in-one" decisions. Test Plan: Reviewers: Subscribers: Tasks: Tags:
Diffstat (limited to 'ossfuzz/fuzz_data_producer.h')
-rw-r--r--ossfuzz/fuzz_data_producer.h27
1 files changed, 27 insertions, 0 deletions
diff --git a/ossfuzz/fuzz_data_producer.h b/ossfuzz/fuzz_data_producer.h
new file mode 100644
index 0000000..c41aaec
--- /dev/null
+++ b/ossfuzz/fuzz_data_producer.h
@@ -0,0 +1,27 @@
+#include <stddef.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+FUZZ_STATIC uint32_t FUZZ_produceUint32Range(uint8_t *data, size_t size,
+ uint32_t min, uint32_t max) {
+ if (min > max) {
+ return 0;
+ }
+
+ uint32_t range = max - min;
+ uint32_t rolling = range;
+ uint32_t result = 0;
+
+ while (rolling > 0 && size > 0) {
+ uint8_t next = *(data + size - 1);
+ size -= 1;
+ result = (result << 8) | next;
+ }
+
+ if (range == 0xffffffff) {
+ return result;
+ }
+
+ return min + result % (range + 1);
+}