From 79fa1b4530a2e88c2a76424fea3be4cc8df575ca Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Sat, 9 Feb 2019 21:38:56 +0200 Subject: [PATCH] tests: JSON parser fuzzer test-json can be used for fuzz testing the JSON parser implementation in src/utils/json.c. Signed-off-by: Jouni Malinen --- src/utils/Makefile | 1 + tests/Makefile | 4 ++++ tests/test-json.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 tests/test-json.c diff --git a/src/utils/Makefile b/src/utils/Makefile index 52efc5321..1ee2bee67 100644 --- a/src/utils/Makefile +++ b/src/utils/Makefile @@ -19,6 +19,7 @@ LIB_OBJS= \ common.o \ crc32.o \ ip_addr.o \ + json.o \ radiotap.o \ trace.o \ uuid.o \ diff --git a/tests/Makefile b/tests/Makefile index 93a844b47..fc449b8ec 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -61,6 +61,9 @@ test-https: test-https.o $(LIBS) test-https_server: test-https_server.o $(LIBS) $(LDO) $(LDFLAGS) -o $@ $< $(LLIBS) +test-json: test-json.o $(LIBS) + $(LDO) $(LDFLAGS) -o $@ $^ $(LLIBS) + test-list: test-list.o $(LIBS) $(LDO) $(LDFLAGS) -o $@ $^ $(LLIBS) @@ -107,6 +110,7 @@ clean: $(MAKE) -C ../src clean rm -f $(TESTS) *~ *.o *.d rm -f test-https + rm -f test-json rm -f test-tls rm -f test_x509v3_nist.out.* rm -f test_x509v3_nist2.out.* diff --git a/tests/test-json.c b/tests/test-json.c new file mode 100644 index 000000000..c7cb46030 --- /dev/null +++ b/tests/test-json.c @@ -0,0 +1,44 @@ +/* + * JSON parser - test program + * Copyright (c) 2019, Jouni Malinen + * + * This software may be distributed under the terms of the BSD license. + * See README for more details. + */ + +#include "utils/includes.h" +#include "utils/os.h" +#include "utils/json.h" + + +int main(int argc, char *argv[]) +{ + char *buf; + size_t len; + struct json_token *root; + + if (argc < 2) + return -1; + + buf = os_readfile(argv[1], &len); + if (!buf) + return -1; + + root = json_parse(buf, len); + os_free(buf); + if (root) { + size_t buflen = 10000; + + buf = os_zalloc(buflen); + if (buf) { + json_print_tree(root, buf, buflen); + printf("%s\n", buf); + os_free(buf); + } + json_free(root); + } else { + printf("JSON parsing failed\n"); + } + + return 0; +}