From 182673ed05a5b5cb79d104df83f34fcc163a9c7e Mon Sep 17 00:00:00 2001 From: Joseph Bisch Date: Mon, 15 Jan 2018 11:59:01 -0500 Subject: [PATCH] Add theme_load to fe-fuzz --- .gitignore | 1 + configure.ac | 2 + src/fe-fuzz/Makefile.am | 2 +- src/fe-fuzz/fe-common/Makefile.am | 1 + src/fe-fuzz/fe-common/core/Makefile.am | 46 +++++++++++++++++ src/fe-fuzz/fe-common/core/theme-load.c | 66 +++++++++++++++++++++++++ 6 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 src/fe-fuzz/fe-common/Makefile.am create mode 100644 src/fe-fuzz/fe-common/core/Makefile.am create mode 100644 src/fe-fuzz/fe-common/core/theme-load.c diff --git a/.gitignore b/.gitignore index b707e9ec..916457f8 100644 --- a/.gitignore +++ b/.gitignore @@ -33,6 +33,7 @@ docs/help/in/Makefile.am src/fe-text/irssi src/fe-fuzz/irssi-fuzz src/fe-fuzz/irc/core/event-get-params-fuzz +src/fe-fuzz/fe-common/core/theme-load-fuzz src/fe-common/irc/irc-modules.c src/irc/irc.c diff --git a/configure.ac b/configure.ac index 4a499b1d..e8df7d9e 100644 --- a/configure.ac +++ b/configure.ac @@ -652,6 +652,8 @@ src/fe-common/irc/notifylist/Makefile src/fe-fuzz/Makefile src/fe-fuzz/irc/Makefile src/fe-fuzz/irc/core/Makefile +src/fe-fuzz/fe-common/Makefile +src/fe-fuzz/fe-common/core/Makefile src/fe-none/Makefile src/fe-text/Makefile src/lib-config/Makefile diff --git a/src/fe-fuzz/Makefile.am b/src/fe-fuzz/Makefile.am index ae49f3df..40abd5ba 100644 --- a/src/fe-fuzz/Makefile.am +++ b/src/fe-fuzz/Makefile.am @@ -1,4 +1,4 @@ -SUBDIRS = irc +SUBDIRS = irc fe-common bin_PROGRAMS = irssi-fuzz diff --git a/src/fe-fuzz/fe-common/Makefile.am b/src/fe-fuzz/fe-common/Makefile.am new file mode 100644 index 00000000..52770885 --- /dev/null +++ b/src/fe-fuzz/fe-common/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = core diff --git a/src/fe-fuzz/fe-common/core/Makefile.am b/src/fe-fuzz/fe-common/core/Makefile.am new file mode 100644 index 00000000..4fe5937c --- /dev/null +++ b/src/fe-fuzz/fe-common/core/Makefile.am @@ -0,0 +1,46 @@ +bin_PROGRAMS = theme-load-fuzz + +# Force link with CXX for libfuzzer support +CCLD=$(CXX) $(CXXFLAGS) + +AM_CPPFLAGS = \ + -I$(top_srcdir)/src \ + -I$(top_srcdir)/src/core/ \ + -I$(top_srcdir)/src/irc/core/ \ + -I$(top_srcdir)/src/fe-common/core/ \ + $(GLIB_CFLAGS) + +AM_DEPENDENCIES = \ + ../../../core/libcore.a \ + ../../../lib-config/libirssi_config.a \ + ../../../irc/libirc.a \ + ../../../irc/core/libirc_core.a \ + ../../../irc/dcc/libirc_dcc.a \ + ../../../irc/flood/libirc_flood.a \ + ../../../irc/notifylist/libirc_notifylist.a \ + ../../../fe-common/core/libfe_common_core.a \ + ../../../fe-common/irc/libfe_common_irc.a \ + ../../../fe-common/irc/dcc/libfe_irc_dcc.a \ + ../../../fe-common/irc/notifylist/libfe_irc_notifylist.a + +LDADD = \ + ../../../irc/libirc.a \ + ../../../irc/core/libirc_core.a \ + ../../../irc/dcc/libirc_dcc.a \ + ../../../irc/flood/libirc_flood.a \ + ../../../irc/notifylist/libirc_notifylist.a \ + ../../../fe-common/core/libfe_common_core.a \ + ../../../fe-common/irc/libfe_common_irc.a \ + ../../../fe-common/irc/dcc/libfe_irc_dcc.a \ + ../../../fe-common/irc/notifylist/libfe_irc_notifylist.a \ + ../../../core/libcore.a \ + ../../../lib-config/libirssi_config.a \ + @PROG_LIBS@ \ + $(FUZZER_LIBS) + +theme_load_fuzz_SOURCES = \ + theme-load.c \ + $(top_srcdir)/src/fe-text/module-formats.c + +noinst_HEADERS = \ + $(top_srcdir)/src/fe-text/module-formats.h diff --git a/src/fe-fuzz/fe-common/core/theme-load.c b/src/fe-fuzz/fe-common/core/theme-load.c new file mode 100644 index 00000000..14df74c6 --- /dev/null +++ b/src/fe-fuzz/fe-common/core/theme-load.c @@ -0,0 +1,66 @@ +/* + theme-load.c : irssi + + Copyright (C) 2018 Joseph Bisch + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +*/ + +#include "module.h" +#include "modules-load.h" +#include "levels.h" +#include "../fe-text/module-formats.h" // need to explicitly grab from fe-text +#include "themes.h" +#include "core.h" +#include "fe-common-core.h" +#include "args.h" +#include "printtext.h" +#include "irc.h" +#include "themes.h" + +#include +#include +#include +#include + +int LLVMFuzzerInitialize(int *argc, char ***argv) { + core_register_options(); + fe_common_core_register_options(); + char *irssi_argv[] = {*argv[0], "--home", "/tmp/irssi", NULL}; + int irssi_argc = sizeof(irssi_argv) / sizeof(char *) - 1; + args_execute(irssi_argc, irssi_argv); + core_preinit((*argv)[0]); + core_init(); + fe_common_core_init(); + theme_register(gui_text_formats); + module_register("core", "fe-fuzz"); + return 0; +} + +int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { + gchar *copy = g_strndup((const gchar *)data, size); + + FILE *fp = fopen("/tmp/irssi/fuzz.theme", "wb"); + if (fp) { + fwrite(copy, strlen(copy), 1, fp); + fclose(fp); + } + + THEME_REC *theme = theme_load("fuzz"); + theme_destroy(theme); + + g_free(copy); + return 0; +}