mirror of https://github.com/google/oss-fuzz.git
[jsonnet] Integrate jsonnet and add a fuzzer (#2045)
* Add jsonnet * Update build.sh * Update build.sh * Update build file * Update build.sh * Update build.sh * Made it workgit status * Add more sanitizer configs * Minor update * Remove emacs
This commit is contained in:
parent
b66302cde7
commit
9d0ab6e60e
|
@ -0,0 +1,23 @@
|
||||||
|
# Copyright 2018 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
|
||||||
|
RUN apt-get update && apt-get install -y build-essential cmake
|
||||||
|
RUN git clone --depth 1 https://github.com/google/jsonnet.git jsonnet
|
||||||
|
WORKDIR $SRC/
|
||||||
|
|
||||||
|
COPY build.sh $SRC/
|
||||||
|
COPY *.cc $SRC/
|
|
@ -0,0 +1,31 @@
|
||||||
|
#!/bin/bash -eu
|
||||||
|
# Copyright 2018 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.
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
mkdir jsonnet/build
|
||||||
|
pushd jsonnet/build
|
||||||
|
cmake -DCMAKE_C_COMPILER="$CC" -DCMAKE_CXX_COMPILER="$CXX" \
|
||||||
|
-DCMAKE_C_FLAGS="$CFLAGS" -DCMAKE_CXX_FLAGS="$CXXFLAGS" ..
|
||||||
|
make -j$(nproc)
|
||||||
|
popd
|
||||||
|
|
||||||
|
INSTALL_DIR="$SRC/jsonnet"
|
||||||
|
|
||||||
|
fuzzer=convert_jsonnet_fuzzer
|
||||||
|
$CXX $CXXFLAGS -I${INSTALL_DIR}/include -lFuzzingEngine \
|
||||||
|
$fuzzer.cc -o $OUT/$fuzzer \
|
||||||
|
${INSTALL_DIR}/build/libjsonnet.a \
|
||||||
|
${INSTALL_DIR}/build/libmd5.a
|
|
@ -0,0 +1,42 @@
|
||||||
|
#include <cstddef>
|
||||||
|
#include <cstdint>
|
||||||
|
#include <cstring>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
#include "libjsonnet.h"
|
||||||
|
}
|
||||||
|
|
||||||
|
char* ImportCallback(void* ctx, const char* base, const char* rel,
|
||||||
|
char** found_here, int* success) {
|
||||||
|
// Don't load file and mark it as failure.
|
||||||
|
*success = 0;
|
||||||
|
char* res = jsonnet_realloc(static_cast<struct JsonnetVm*>(ctx), nullptr, 1);
|
||||||
|
res[0] = 0;
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string ConvertJsonnetToJson(const std::string& jsonnet) {
|
||||||
|
JsonnetVm* jvm = jsonnet_make();
|
||||||
|
jsonnet_import_callback(jvm, ImportCallback, jvm);
|
||||||
|
int error = 0;
|
||||||
|
char* res =
|
||||||
|
jsonnet_evaluate_snippet(jvm, /*filename=*/"", jsonnet.c_str(), &error);
|
||||||
|
|
||||||
|
std::string json;
|
||||||
|
if (error == 0 && res != nullptr) {
|
||||||
|
json = res;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (res) {
|
||||||
|
jsonnet_realloc(jvm, res, 0);
|
||||||
|
}
|
||||||
|
jsonnet_destroy(jvm);
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
|
||||||
|
std::string fuzz_jsonnet(reinterpret_cast<const char*>(data), size);
|
||||||
|
ConvertJsonnetToJson(fuzz_jsonnet);
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,15 @@
|
||||||
|
homepage: "https://github.com/google/jsonnet"
|
||||||
|
primary_contact: "dcunnin@google.com"
|
||||||
|
auto_ccs:
|
||||||
|
- "wwweiwang@google.com"
|
||||||
|
|
||||||
|
experimental: True
|
||||||
|
|
||||||
|
sanitizers:
|
||||||
|
- address
|
||||||
|
- memory
|
||||||
|
- undefined
|
||||||
|
|
||||||
|
labels:
|
||||||
|
convert_jsonnet_fuzzer:
|
||||||
|
- sundew
|
Loading…
Reference in New Issue