mirror of https://github.com/google/oss-fuzz.git
[libphonenumber] Initial integration (#4629)
* [libphonenumber] Initial integration * Fixed coverage build of libphonenumber. * Fix build of libphonenumber. * Trying to fix coverage build. Cannot replicate CI issue locally, however.
This commit is contained in:
parent
a3356cbb7c
commit
2d0251ce65
|
@ -0,0 +1,26 @@
|
||||||
|
# Copyright 2020 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 autoconf automake libtool g++ cmake-curses-gui libgtest-dev libre2-dev libicu-dev libboost-dev libboost-thread-dev libboost-system-dev binutils ninja-build liblzma-dev libz-dev pkg-config wget openjdk-8-jdk
|
||||||
|
|
||||||
|
WORKDIR $SRC/
|
||||||
|
RUN git clone https://github.com/google/libphonenumber
|
||||||
|
|
||||||
|
RUN wget https://github.com/unicode-org/icu/releases/download/release-55-2/icu4c-55_2-src.tgz && tar xzvf icu4c-55_2-src.tgz
|
||||||
|
|
||||||
|
COPY build.sh $SRC/
|
||||||
|
COPY phonefuzz.cc $SRC/
|
|
@ -0,0 +1,87 @@
|
||||||
|
#!/bin/bash -eu
|
||||||
|
# Copyright 2020 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.
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
# For coverage build we need to remove some flags when building protobuf and icu
|
||||||
|
if [ "$SANITIZER" = "coverage" ]
|
||||||
|
then
|
||||||
|
export OCX=$CXXFLAGS
|
||||||
|
export OC=$CFLAGS
|
||||||
|
CF1=${CFLAGS//-fprofile-instr-generate/}
|
||||||
|
export CFLAGS=${CF1//-fcoverage-mapping/}
|
||||||
|
CXF1=${CXXFLAGS//-fprofile-instr-generate/}
|
||||||
|
export CXXFLAGS=${CXF1//-fcoverage-mapping/}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Build Protobuf
|
||||||
|
git clone https://github.com/google/protobuf.git
|
||||||
|
cd protobuf
|
||||||
|
git submodule update --init --recursive
|
||||||
|
./autogen.sh
|
||||||
|
./configure
|
||||||
|
make -j$(nproc)
|
||||||
|
make install
|
||||||
|
ldconfig
|
||||||
|
|
||||||
|
|
||||||
|
# Build icu
|
||||||
|
export DEPS_PATH=/src/deps/
|
||||||
|
mkdir $DEPS_PATH
|
||||||
|
|
||||||
|
# build ICU for linking statically.
|
||||||
|
cd $SRC/icu/source
|
||||||
|
./configure --disable-shared --enable-static --disable-layoutex \
|
||||||
|
--disable-tests --disable-samples --with-data-packaging=static --prefix=$DEPS_PATH
|
||||||
|
make install -j$(nproc)
|
||||||
|
|
||||||
|
# Ugly ugly hack to get static linking to work for icu.
|
||||||
|
cd $DEPS_PATH/lib
|
||||||
|
ls *.a | xargs -n1 ar x
|
||||||
|
rm *.a
|
||||||
|
ar r libicu.a *.{ao,o}
|
||||||
|
ln -s libicu.a libicudata.a
|
||||||
|
ln -s libicu.a libicuuc.a
|
||||||
|
ln -s libicu.a libicui18n.a
|
||||||
|
|
||||||
|
if [ "$SANITIZER" = "coverage" ]
|
||||||
|
then
|
||||||
|
export CFLAGS=$OC
|
||||||
|
export CXXFLAGS=$OCX
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Build libphonenumber
|
||||||
|
cd $SRC/libphonenumber/cpp
|
||||||
|
sed -i 's/set (BUILD_SHARED_LIB true)/set (BUILD_SHARED_LIB false)/g' CMakeLists.txt
|
||||||
|
sed -i 's/list (APPEND CMAKE_C_FLAGS "-pthread")/string (APPEND CMAKE_C_FLAGS " -pthread")/g' CMakeLists.txt
|
||||||
|
|
||||||
|
mkdir build && cd build
|
||||||
|
cmake -DUSE_BOOST=OFF -DBUILD_GEOCODER=OFF -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \
|
||||||
|
-DICU_UC_INCLUDE_DIR=$SRC/icu/source/comon \
|
||||||
|
-DICU_UC_LIB=$DEPS_PATH/lib/libicuuc.a \
|
||||||
|
-DICU_I18N_INCLUDE_DIR=$SRC/icu/source/i18n/ \
|
||||||
|
-DICU_I18N_LIB=$DEPS_PATH/lib/libicui18n.a ../
|
||||||
|
make
|
||||||
|
cd ../
|
||||||
|
|
||||||
|
# Build our fuzzer
|
||||||
|
cp $SRC/*fuzz.cc .
|
||||||
|
$CXX -I/src/libphonenumber/cpp/src $CXXFLAGS -o phonefuzz.o -c phonefuzz.cc
|
||||||
|
|
||||||
|
$CXX $CXXFLAGS $LIB_FUZZING_ENGINE phonefuzz.o -o phonefuzz \
|
||||||
|
build/libphonenumber.a $SRC/protobuf/src/.libs/libprotobuf.a \
|
||||||
|
$DEPS_PATH/lib/libicu.a -lpthread
|
||||||
|
|
||||||
|
cp phonefuzz $OUT/
|
|
@ -0,0 +1,48 @@
|
||||||
|
/* Copyright 2020 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.
|
||||||
|
*/
|
||||||
|
#include "phonenumbers/phonenumbermatcher.h"
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include <unicode/unistr.h>
|
||||||
|
|
||||||
|
#include "phonenumbers/base/basictypes.h"
|
||||||
|
#include "phonenumbers/base/memory/scoped_ptr.h"
|
||||||
|
#include "phonenumbers/base/memory/singleton.h"
|
||||||
|
#include "phonenumbers/default_logger.h"
|
||||||
|
#include "phonenumbers/phonenumber.h"
|
||||||
|
#include "phonenumbers/phonenumber.pb.h"
|
||||||
|
#include "phonenumbers/phonenumbermatch.h"
|
||||||
|
#include "phonenumbers/phonenumberutil.h"
|
||||||
|
#include "phonenumbers/stringutil.h"
|
||||||
|
|
||||||
|
extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
|
||||||
|
{
|
||||||
|
if (size < 75)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
std::string input(reinterpret_cast<const char*>(data), 60);
|
||||||
|
data += 60;
|
||||||
|
size -= 60;
|
||||||
|
std::string input2(reinterpret_cast<const char*>(data), size);
|
||||||
|
|
||||||
|
i18n::phonenumbers::PhoneNumberUtil *phone_util = i18n::phonenumbers::PhoneNumberUtil::GetInstance();
|
||||||
|
i18n::phonenumbers::PhoneNumber parsed;
|
||||||
|
phone_util->Parse(input, input2, &parsed);
|
||||||
|
phone_util->IsValidNumber(parsed);
|
||||||
|
phone_util->GetCountryCodeForRegion(input);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
homepage: "https://github.com/google/libphonenumber/"
|
||||||
|
primary_contact: "david@adalogics.com"
|
||||||
|
language: c++
|
||||||
|
auto_ccs:
|
||||||
|
- "david@adalogics.com"
|
||||||
|
fuzzing_engines:
|
||||||
|
- libfuzzer
|
||||||
|
- honggfuzz
|
||||||
|
sanitizers:
|
||||||
|
- address
|
Loading…
Reference in New Issue