]> granicus.if.org Git - file/commitdiff
Add oss-fuzz glue. Hope I got this right :-)
authorChristos Zoulas <christos@zoulas.com>
Mon, 24 Apr 2017 19:41:34 +0000 (19:41 +0000)
committerChristos Zoulas <christos@zoulas.com>
Mon, 24 Apr 2017 19:41:34 +0000 (19:41 +0000)
fuzz/Dockerfile [new file with mode: 0644]
fuzz/build.sh [new file with mode: 0755]
fuzz/magic_fuzzer.c [new file with mode: 0644]
fuzz/project.yaml [new file with mode: 0644]

diff --git a/fuzz/Dockerfile b/fuzz/Dockerfile
new file mode 100644 (file)
index 0000000..c965aab
--- /dev/null
@@ -0,0 +1,21 @@
+# Copyright 2016 Google Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+################################################################################
+
+FROM gcr.io/oss-fuzz-base/base-builder
+MAINTAINER mike.aizatsky@gmail.com
+RUN apt-get install -y make autoconf automake libtool shtool
+RUN git clone --depth 1 https://github.com/file/file.git
+WORKDIR file/fuzz
diff --git a/fuzz/build.sh b/fuzz/build.sh
new file mode 100755 (executable)
index 0000000..6f23fcd
--- /dev/null
@@ -0,0 +1,29 @@
+#!/bin/bash -eu
+# Copyright 2016 Google Inc.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+################################################################################
+
+: ${SRC:=.}
+: ${OUT:=.}
+: ${CC:=cc}
+: ${CFLAGS:=-O -DHAVE_CONFIG_H -Wall}
+
+#(cd .. && autoreconf -i && ./configure --enable-static && make V=1 all)
+
+"$CC" $CFLAGS -I../src/ -I.. \
+     "$SRC/magic_fuzzer.c" -o "$OUT/magic_fuzzer" \
+     -lFuzzingEngine ../src/.libs/libmagic.a
+
+cp ../magic/magic.mgc "$OUT/magic.mgc"
diff --git a/fuzz/magic_fuzzer.c b/fuzz/magic_fuzzer.c
new file mode 100644 (file)
index 0000000..9a11162
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice immediately at the beginning of the file, without modification,
+ *    this list of conditions, and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *  
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+/*
+ * LLVM fuzzing integration.
+ */
+
+#include "file.h"
+
+#ifndef        lint
+FILE_RCSID("@(#)$File: magic_fuzzer.c,v 1.1 2017/04/24 19:41:34 christos Exp $")
+#endif /* lint */
+
+#include "magic.h"
+#include <libgen.h>
+#include <stdlib.h>
+#include <err.h>
+
+int LLVMFuzzerInitialize(int *, char ***);
+int LLVMFuzzerTestOneInput(const uint8_t *, size_t);
+
+static magic_t magic;
+
+int
+LLVMFuzzerInitialize(int *argc, char ***argv)
+{
+       char dfile[MAXPATHLEN], mfile[MAXPATHLEN];
+
+       magic = magic_open(MAGIC_NONE);
+       if (magic == NULL) {
+               warn("magic_open");
+               return -1;
+       }
+
+       // Poor man's strlcpy(3), to avoid potentially destructive dirname(3)
+       snprintf(dfile, sizeof(dfile), "%s", (*argv)[0]);
+       snprintf(mfile, sizeof(mfile), "%s/magic", dirname(dfile));
+
+       if (magic_load(magic, mfile) == -1) {
+               warnx("magic_load: %s", magic_error(magic));
+               return -1;
+       }
+
+       return 0;
+}
+
+int
+LLVMFuzzerTestOneInput(const uint8_t* data, size_t size)
+{
+       if (size == 0)
+               return 0;
+
+       magic_buffer(magic, data, size);
+       return 0;
+}
diff --git a/fuzz/project.yaml b/fuzz/project.yaml
new file mode 100644 (file)
index 0000000..1a8eda7
--- /dev/null
@@ -0,0 +1,6 @@
+homepage: "http://www.darwinsys.com/file/"
+primary_contact: "zoulasc@gmail.com"
+sanitizers:
+  - address
+  - memory
+  - undefined