Add ClusterFuzzLite workflow

Signed-off-by: David Korczynski <david@adalogics.com>
This commit is contained in:
David Korczynski 2024-05-10 16:30:01 -07:00
parent 025cdde5f2
commit b691ff34ff
5 changed files with 74 additions and 0 deletions

View File

@ -0,0 +1,8 @@
FROM gcr.io/oss-fuzz-base/base-builder
RUN apt-get update && apt-get install -y make autoconf automake libtool cmake \
pkg-config curl check
COPY . $SRC/tiny-json
COPY .clusterfuzzlite/build.sh $SRC/build.sh
COPY .clusterfuzzlite/*.cpp $SRC/
COPY .clusterfuzzlite/*.c $SRC/
WORKDIR tiny-json

View File

@ -0,0 +1,9 @@
#!/bin/bash
find . -name "*.c" -exec $CC $CFLAGS -I./src -c {} \;
find . -name "*.o" -exec cp {} . \;
rm -f ./test*.o
llvm-ar rcs libfuzz.a *.o
$CC $CFLAGS $LIB_FUZZING_ENGINE $SRC/fuzzer.c -Wl,--whole-archive $SRC/tiny-json/libfuzz.a -Wl,--allow-multiple-definition -I$SRC/tiny-json/ -o $OUT/fuzzer

26
.clusterfuzzlite/fuzzer.c Normal file
View File

@ -0,0 +1,26 @@
#include <stdlib.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include "tiny-json.h"
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
// Create an input string with null-termination
char* input_string = (char*)malloc(size + 1);
if (input_string == NULL) {
return 0;
}
memcpy(input_string, data, size);
input_string[size] = '\0';
// Create an array of json_t for the second argument
json_t json_array[10]; // Assuming max size of 10 for simplicity
// Call the target function with the input data
json_create(input_string, json_array, 10);
free(input_string);
return 0;
}

View File

@ -0,0 +1 @@
language: c

30
.github/workflows/cflite_pr.yml vendored Normal file
View File

@ -0,0 +1,30 @@
name: ClusterFuzzLite PR fuzzing
on:
workflow_dispatch:
pull_request:
branches: [ master ]
permissions: read-all
jobs:
PR:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
sanitizer: [address]
steps:
- name: Build Fuzzers (${{ matrix.sanitizer }})
id: build
uses: google/clusterfuzzlite/actions/build_fuzzers@v1
with:
sanitizer: ${{ matrix.sanitizer }}
language: c++
bad-build-check: false
- name: Run Fuzzers (${{ matrix.sanitizer }})
id: run
uses: google/clusterfuzzlite/actions/run_fuzzers@v1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
fuzz-seconds: 100
mode: 'code-change'
report-unreproducible-crashes: false
sanitizer: ${{ matrix.sanitizer }}