]> granicus.if.org Git - onig/commitdiff
add etc/libfuzzer-onig.cpp
authorK.Kosako <kkosako0@gmail.com>
Sun, 28 Aug 2016 10:19:02 +0000 (19:19 +0900)
committerK.Kosako <kkosako0@gmail.com>
Sun, 28 Aug 2016 10:19:02 +0000 (19:19 +0900)
etc/libfuzzer-onig.cpp [new file with mode: 0644]

diff --git a/etc/libfuzzer-onig.cpp b/etc/libfuzzer-onig.cpp
new file mode 100644 (file)
index 0000000..984110d
--- /dev/null
@@ -0,0 +1,31 @@
+/* libfuzzer test code for oniguruma
+ * author: Hanno Böck, license: CC0/public domain
+
+Usage:
+* compile oniguruma with something like
+       ./configure CC=clang LD=clang CFLAGS="-fsanitize-coverage=edge -fsanitize=address" \
+               LDFLAGS="-fsanitize-coverage=edge -fsanitize=address"
+* Compile libfuzzer stub and link against static libonig.a and libFuzzer.a:
+       clang++ libfuzzer-onig.cpp src/.libs/libonig.a libFuzzer.a -o libfuzzer-onig \
+               -fsanitize-coverage=edge -fsanitize=address
+* Put sample patterns in directory "in/"
+* Run
+       ./libfuzzer-onig in
+
+Consult libfuzzer docs for further details and how to create libFuzzer.a:
+http://llvm.org/docs/LibFuzzer.html
+
+ */
+#include <stdint.h>
+#include <string.h>
+#include <oniguruma.h>
+
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t * Data, size_t Size)
+{
+       regex_t *reg;
+       if (onig_new
+           (&reg, Data, Data + Size, ONIG_OPTION_DEFAULT, ONIG_ENCODING_UTF8,
+            ONIG_SYNTAX_DEFAULT, 0) == 0)
+               onig_free(reg);
+       return 0;
+}