Bladeren bron

Add a fuzzer for `parseNumber()`

See #2220
Benoit Blanchon 22 uur geleden
bovenliggende
commit
a9bb1a1df5
28 gewijzigde bestanden met toevoegingen van 42 en 2 verwijderingen
  1. 1 0
      extras/fuzzing/CMakeLists.txt
  2. 5 2
      extras/fuzzing/Makefile
  3. 2 0
      extras/fuzzing/number_corpus/.gitignore
  4. 10 0
      extras/fuzzing/number_fuzzer.cpp
  5. 1 0
      extras/fuzzing/number_seed_corpus/decimal_half
  6. 1 0
      extras/fuzzing/number_seed_corpus/decimal_one_and_half
  7. 1 0
      extras/fuzzing/number_seed_corpus/infinity
  8. 1 0
      extras/fuzzing/number_seed_corpus/issue2220-1
  9. 1 0
      extras/fuzzing/number_seed_corpus/issue2220-2
  10. 1 0
      extras/fuzzing/number_seed_corpus/large_decimal
  11. 1 0
      extras/fuzzing/number_seed_corpus/large_integer
  12. 1 0
      extras/fuzzing/number_seed_corpus/leading_zeros
  13. 1 0
      extras/fuzzing/number_seed_corpus/nan
  14. 1 0
      extras/fuzzing/number_seed_corpus/negative_decimal
  15. 1 0
      extras/fuzzing/number_seed_corpus/negative_one
  16. 1 0
      extras/fuzzing/number_seed_corpus/negative_scientific
  17. 1 0
      extras/fuzzing/number_seed_corpus/negative_scientific_large_exp
  18. 1 0
      extras/fuzzing/number_seed_corpus/negative_zero
  19. 1 0
      extras/fuzzing/number_seed_corpus/one
  20. 1 0
      extras/fuzzing/number_seed_corpus/pi_approximation
  21. 1 0
      extras/fuzzing/number_seed_corpus/scientific_e10
  22. 1 0
      extras/fuzzing/number_seed_corpus/scientific_e_minus
  23. 1 0
      extras/fuzzing/number_seed_corpus/scientific_e_plus
  24. 1 0
      extras/fuzzing/number_seed_corpus/small_decimal
  25. 1 0
      extras/fuzzing/number_seed_corpus/small_integer
  26. 1 0
      extras/fuzzing/number_seed_corpus/trailing_zeros
  27. 1 0
      extras/fuzzing/number_seed_corpus/very_small_positive
  28. 1 0
      extras/fuzzing/number_seed_corpus/zero

+ 1 - 0
extras/fuzzing/CMakeLists.txt

@@ -64,4 +64,5 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND CMAKE_CXX_COMPILER_VERSION VERSION
 
 	add_fuzzer(json)
 	add_fuzzer(msgpack)
+	add_fuzzer(number)
 endif()

+ 5 - 2
extras/fuzzing/Makefile

@@ -8,7 +8,10 @@ all: \
 	$(OUT)/json_fuzzer.options \
 	$(OUT)/msgpack_fuzzer \
 	$(OUT)/msgpack_fuzzer_seed_corpus.zip \
-	$(OUT)/msgpack_fuzzer.options
+	$(OUT)/msgpack_fuzzer.options \
+	$(OUT)/number_fuzzer \
+	$(OUT)/number_fuzzer_seed_corpus.zip \
+	$(OUT)/number_fuzzer.options
 
 $(OUT)/%_fuzzer: %_fuzzer.cpp $(shell find ../../src -type f)
 	$(CXX) $(CXXFLAGS) $< -o$@ $(LIB_FUZZING_ENGINE)
@@ -18,5 +21,5 @@ $(OUT)/%_fuzzer_seed_corpus.zip: %_seed_corpus/*
 
 $(OUT)/%_fuzzer.options:
 	@echo "[libfuzzer]" > $@
-	@echo "max_len = 256" >> $@
+	@echo "max_len = 4096" >> $@
 	@echo "timeout = 10" >> $@

+ 2 - 0
extras/fuzzing/number_corpus/.gitignore

@@ -0,0 +1,2 @@
+*
+!.gitignore

+ 10 - 0
extras/fuzzing/number_fuzzer.cpp

@@ -0,0 +1,10 @@
+#include <ArduinoJson.h>
+
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
+  // Make a copy to ensure the input is null-terminated
+  std::string str(reinterpret_cast<const char*>(data), size);
+
+  ArduinoJson::detail::parseNumber(str.c_str());
+
+  return 0;
+}

+ 1 - 0
extras/fuzzing/number_seed_corpus/decimal_half

@@ -0,0 +1 @@
+0.5

+ 1 - 0
extras/fuzzing/number_seed_corpus/decimal_one_and_half

@@ -0,0 +1 @@
+1.5

+ 1 - 0
extras/fuzzing/number_seed_corpus/infinity

@@ -0,0 +1 @@
+infinity

+ 1 - 0
extras/fuzzing/number_seed_corpus/issue2220-1

@@ -0,0 +1 @@
+1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

+ 1 - 0
extras/fuzzing/number_seed_corpus/issue2220-2

@@ -0,0 +1 @@
+0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001

+ 1 - 0
extras/fuzzing/number_seed_corpus/large_decimal

@@ -0,0 +1 @@
+999999.999999

+ 1 - 0
extras/fuzzing/number_seed_corpus/large_integer

@@ -0,0 +1 @@
+9876543210

+ 1 - 0
extras/fuzzing/number_seed_corpus/leading_zeros

@@ -0,0 +1 @@
+0.00001

+ 1 - 0
extras/fuzzing/number_seed_corpus/nan

@@ -0,0 +1 @@
+nan

+ 1 - 0
extras/fuzzing/number_seed_corpus/negative_decimal

@@ -0,0 +1 @@
+-123.456

+ 1 - 0
extras/fuzzing/number_seed_corpus/negative_one

@@ -0,0 +1 @@
+-1

+ 1 - 0
extras/fuzzing/number_seed_corpus/negative_scientific

@@ -0,0 +1 @@
+-2.5e-3

+ 1 - 0
extras/fuzzing/number_seed_corpus/negative_scientific_large_exp

@@ -0,0 +1 @@
+-1.23456e+20

+ 1 - 0
extras/fuzzing/number_seed_corpus/negative_zero

@@ -0,0 +1 @@
+-0

+ 1 - 0
extras/fuzzing/number_seed_corpus/one

@@ -0,0 +1 @@
+1

+ 1 - 0
extras/fuzzing/number_seed_corpus/pi_approximation

@@ -0,0 +1 @@
+3.14159265359

+ 1 - 0
extras/fuzzing/number_seed_corpus/scientific_e10

@@ -0,0 +1 @@
+1e10

+ 1 - 0
extras/fuzzing/number_seed_corpus/scientific_e_minus

@@ -0,0 +1 @@
+1.5e-10

+ 1 - 0
extras/fuzzing/number_seed_corpus/scientific_e_plus

@@ -0,0 +1 @@
+1.23e+5

+ 1 - 0
extras/fuzzing/number_seed_corpus/small_decimal

@@ -0,0 +1 @@
+0.001

+ 1 - 0
extras/fuzzing/number_seed_corpus/small_integer

@@ -0,0 +1 @@
+42

+ 1 - 0
extras/fuzzing/number_seed_corpus/trailing_zeros

@@ -0,0 +1 @@
+1000000

+ 1 - 0
extras/fuzzing/number_seed_corpus/very_small_positive

@@ -0,0 +1 @@
+0.0000001

+ 1 - 0
extras/fuzzing/number_seed_corpus/zero

@@ -0,0 +1 @@
+0