pcre2 fuzzer (#24)

This commit is contained in:
Kostya Serebryany 2016-10-12 20:45:44 -07:00 committed by Oliver Chang
parent ed4727e67a
commit c69f279169
4 changed files with 98 additions and 0 deletions

21
pcre2/Dockerfile Normal file
View File

@ -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 ossfuzz/base-libfuzzer
MAINTAINER kcc@google.com
RUN apt-get install -y make autoconf automake libtool subversion
COPY build.sh /src/

23
pcre2/Jenkinsfile vendored Normal file
View File

@ -0,0 +1,23 @@
// 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.
//
////////////////////////////////////////////////////////////////////////////////
def libfuzzerBuild = fileLoader.fromGit('infra/libfuzzer-pipeline.groovy',
'https://github.com/google/oss-fuzz.git')
libfuzzerBuild {
// the real source is in svn
git = "https://github.com/google/oss-fuzz.git"
}

33
pcre2/build.sh Executable file
View File

@ -0,0 +1,33 @@
#!/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.
#
################################################################################
cd /src/pcre2
svn co svn://vcs.exim.org/pcre2/code/trunk pcre2
cd pcre2
# build the library.
./autogen.sh
SAVED_LDFLAGS="$LDFLAGS"
export LDFLAGS= # Can't use provided LDFLAGS to build pcre's .a targets.
./configure --enable-never-backslash-C --with-match-limit=1000 --with-match-limit-recursion=1000
make clean all
# Build the target.
$CXX $CXXFLAGS -std=c++11 -I src \
/src/oss-fuzz/pcre2/pcre2_fuzzer.cc -o /out/pcre2_fuzzer \
-Wl,--whole-archive .libs/*.a -Wl,-no-whole-archive $SAVED_LDFLAGS \
/work/libfuzzer/*.o

21
pcre2/pcre2_fuzzer.cc Normal file
View File

@ -0,0 +1,21 @@
// Copyright 2016 Google Inc. All Rights Reserved.
// Licensed under the Apache License, Version 2.0 (the "License");
#include <string>
#include "pcre2posix.h"
using std::string;
extern "C" int LLVMFuzzerTestOneInput(const unsigned char *data, size_t size) {
if (size < 1) return 0;
regex_t preg;
string str(reinterpret_cast<const char*>(data), size);
string pat(str);
int flags = data[size/2] - 'a'; // Make it 0 when the byte is 'a'.
if (0 == regcomp(&preg, pat.c_str(), flags)) {
regmatch_t pmatch[5];
regexec(&preg, str.c_str(), 5, pmatch, 0);
regfree(&preg);
}
return 0;
}