Fuzzing target for xdgmime
authorsweet.kim <sweet.kim@samsung.com>
Mon, 17 Jul 2017 07:14:38 +0000 (16:14 +0900)
committerMaria Guseva <m.guseva@samsung.com>
Mon, 14 Aug 2017 16:52:20 +0000 (19:52 +0300)
Fuzzed functions:
* xdg_mime_get_mime_type_for_data (data, len, result_prio)
* xdg_mime_get_mime_type_from_file_name (file_name)

targets/xdgmime/README.md [new file with mode: 0755]
targets/xdgmime/build.sh [new file with mode: 0755]
targets/xdgmime/xdgmime-data-fuzz.cpp [new file with mode: 0644]
targets/xdgmime/xdgmime-filename-fuzz.cpp [new file with mode: 0644]

diff --git a/targets/xdgmime/README.md b/targets/xdgmime/README.md
new file mode 100755 (executable)
index 0000000..b1c592e
--- /dev/null
@@ -0,0 +1,8 @@
+# xdgmime
+
+Target functions for xdgmime (platform/core/appfw/xdgmime)
+
+Fuzzed functions:
+* xdg_mime_get_mime_type_for_data (data, len, result_prio)
+* xdg_mime_get_mime_type_from_file_name (file_name)
+
diff --git a/targets/xdgmime/build.sh b/targets/xdgmime/build.sh
new file mode 100755 (executable)
index 0000000..f0f39fd
--- /dev/null
@@ -0,0 +1,19 @@
+#!/bin/bash -e
+
+BUILD_HOME=/home/abuild/rpmbuild/BUILD/xdgmime-0.0.12
+CXX=g++
+SOURCE=("xdgmime-data-fuzz.cpp" "xdgmime-filename-fuzz.cpp")
+CFLAGS="-g -I${BUILD_HOME}/xdgmime/src "
+LDFLAGS="-L${BUILD_HOME} -lxdgmime -lpthread "
+OUT=("xdgmime-data-fuzz.out" "xdgmime-filename-fuzz.out")
+LIBFUZZER=$(rpm -ql libFuzzer 2>/dev/null | grep libFuzzer.a)
+
+if [[ -z $LIBFUZZER ]]; then
+   echo "libFuzzer is not installed!"
+   exit 1
+fi
+
+for i in "${!SOURCE[@]}"; do
+       ${CXX} ${CFLAGS} ${SOURCE[$i]} ${LIBFUZZER} ${LDFLAGS} -o ${OUT[$i]}
+done
+
diff --git a/targets/xdgmime/xdgmime-data-fuzz.cpp b/targets/xdgmime/xdgmime-data-fuzz.cpp
new file mode 100644 (file)
index 0000000..12a542b
--- /dev/null
@@ -0,0 +1,20 @@
+#include <stdint.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <unistd.h>
+#include <assert.h>
+
+#include <xdgmime.h>
+
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+       int prio;
+
+       /* Fuzzing target */
+       xdg_mime_get_mime_type_for_data((void *)data, size, &prio);
+
+       return 0;
+}
diff --git a/targets/xdgmime/xdgmime-filename-fuzz.cpp b/targets/xdgmime/xdgmime-filename-fuzz.cpp
new file mode 100644 (file)
index 0000000..e6a0049
--- /dev/null
@@ -0,0 +1,27 @@
+#include <stdio.h>
+#include <stdint.h>
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <unistd.h>
+#include <assert.h>
+
+#include <xdgmime.h>
+
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+       char *file_extension_with_dot = (char *)calloc(size + 2, sizeof(char));
+
+       file_extension_with_dot[0] = '.';
+       memcpy(file_extension_with_dot + 1, data, size);
+       file_extension_with_dot[size+1] = '\0';
+
+       /* Target Function */
+       xdg_mime_get_mime_type_from_file_name(file_extension_with_dot);
+
+       free(file_extension_with_dot);
+
+       return 0;
+}