Blame contributed/libfuzzer-onig.cpp
|
Packit |
b89d10 |
/* libfuzzer test code for oniguruma
|
|
Packit |
b89d10 |
* author: Hanno Böck, license: CC0/public domain
|
|
Packit |
b89d10 |
|
|
Packit |
b89d10 |
Usage:
|
|
Packit |
b89d10 |
* compile oniguruma with something like
|
|
Packit |
b89d10 |
./configure CC=clang LD=clang CFLAGS="-fsanitize-coverage=edge -fsanitize=address" \
|
|
Packit |
b89d10 |
LDFLAGS="-fsanitize-coverage=edge -fsanitize=address"
|
|
Packit |
b89d10 |
* Compile libfuzzer stub and link against static libonig.a and libFuzzer.a:
|
|
Packit |
b89d10 |
clang++ libfuzzer-onig.cpp src/.libs/libonig.a libFuzzer.a -o libfuzzer-onig \
|
|
Packit |
b89d10 |
-fsanitize-coverage=edge -fsanitize=address
|
|
Packit |
b89d10 |
* Put sample patterns in directory "in/"
|
|
Packit |
b89d10 |
* Run
|
|
Packit |
b89d10 |
./libfuzzer-onig in
|
|
Packit |
b89d10 |
|
|
Packit |
b89d10 |
Consult libfuzzer docs for further details and how to create libFuzzer.a:
|
|
Packit |
b89d10 |
http://llvm.org/docs/LibFuzzer.html
|
|
Packit |
b89d10 |
|
|
Packit |
b89d10 |
*/
|
|
Packit |
b89d10 |
#include <stdint.h>
|
|
Packit |
b89d10 |
#include <string.h>
|
|
Packit |
b89d10 |
#include <oniguruma.h>
|
|
Packit |
b89d10 |
|
|
Packit |
b89d10 |
extern "C" int LLVMFuzzerTestOneInput(const uint8_t * Data, size_t Size)
|
|
Packit |
b89d10 |
{
|
|
Packit |
b89d10 |
regex_t *reg;
|
|
Packit |
b89d10 |
OnigEncoding enc;
|
|
Packit |
b89d10 |
|
|
Packit |
b89d10 |
enc = ONIG_ENCODING_UTF8;
|
|
Packit |
b89d10 |
|
|
Packit |
b89d10 |
#ifdef FULL_TEST
|
|
Packit |
b89d10 |
onig_initialize(&enc, 1);
|
|
Packit |
b89d10 |
#endif
|
|
Packit |
b89d10 |
|
|
Packit |
b89d10 |
if (onig_new(®, Data, Data + Size, ONIG_OPTION_DEFAULT, enc,
|
|
Packit |
b89d10 |
ONIG_SYNTAX_DEFAULT, 0) == 0)
|
|
Packit |
b89d10 |
onig_free(reg);
|
|
Packit |
b89d10 |
|
|
Packit |
b89d10 |
#ifdef FULL_TEST
|
|
Packit |
b89d10 |
onig_end();
|
|
Packit |
b89d10 |
#endif
|
|
Packit |
b89d10 |
|
|
Packit |
b89d10 |
return 0;
|
|
Packit |
b89d10 |
}
|