2022-08-29 23:20:50 +00:00
#!/bin/bash -eu
# Copyright 2022 Google LLC
#
# 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.
#
################################################################################
MAVEN_ARGS = "-Djavac.src.version=15 -Djavac.target.version=15 -DskipTests -Drat.ignoreErrors=true"
ALL_JARS = ""
pushd " ${ SRC } /commons-logging "
$MVN package $MAVEN_ARGS
CURRENT_VERSION = $( $MVN org.apache.maven.plugins:maven-help-plugin:3.2.0:evaluate \
-Dexpression= project.version -q -DforceStdout)
cp -v target/commons-logging-${ CURRENT_VERSION } .jar " $OUT /commons-logging.jar "
ALL_JARS = " ${ ALL_JARS } commons-logging.jar "
popd
2022-11-15 04:28:51 +00:00
LOG4J_VERSION = $( echo $( curl -s 'https://api.github.com/repos/apache/logging-log4j2/tags?per_page=1' | jq -r .[ ] .name) | sed 's/^[^0-9]*//' )
curl " https://dlcdn.apache.org/logging/log4j/ $LOG4J_VERSION /apache-log4j- $LOG4J_VERSION -bin.tar.gz " -o apache-log4j-bin.tar.gz
tar xf apache-log4j-bin.tar.gz
unlink apache-log4j-bin.tar.gz
mv apache-log4j-$LOG4J_VERSION -bin $SRC
for jarFile in ${ SRC } /apache-log4j-$LOG4J_VERSION -bin/log4j-api-$LOG4J_VERSION .jar ${ SRC } /apache-log4j-$LOG4J_VERSION -bin/log4j-core-$LOG4J_VERSION .jar ${ SRC } /apache-log4j-$LOG4J_VERSION -bin/log4j-1.2-api-$LOG4J_VERSION .jar ; do
2022-08-29 23:20:50 +00:00
cp -v ${ jarFile } " $OUT / $( basename ${ jarFile } ) "
ALL_JARS = " ${ ALL_JARS } $( basename ${ jarFile } ) "
done
# The classpath at build-time includes the project jars in $OUT as well as the
# Jazzer API.
BUILD_CLASSPATH = $( echo $ALL_JARS | xargs printf -- " $OUT /%s: " ) :$JAZZER_API_PATH
# All .jar and .class files lie in the same directory as the fuzzer at runtime.
RUNTIME_CLASSPATH = $( echo $ALL_JARS | xargs printf -- "\$this_dir/%s:" ) :\$ this_dir
# compile all java files and copy them to $OUT
javac -cp $SRC :$BUILD_CLASSPATH -g $SRC /*.java $SRC /Package/*.java
mkdir -p $OUT /Package
cp -vr $SRC /Package/*.class $OUT /Package
cp -v $SRC /*.class $OUT /
cp -v $SRC /*.xml $OUT /
for fuzzer in $( find $SRC -name '*Fuzzer.java' ) ; do
fuzzer_basename = $( basename -s .java $fuzzer )
# Create an execution wrapper that executes Jazzer with the correct arguments.
2022-10-19 17:51:06 +00:00
echo " #!/bin/bash
2022-08-29 23:20:50 +00:00
# LLVMFuzzerTestOneInput for fuzzer detection.
this_dir = \$ ( dirname \" \$ 0\" )
2022-10-19 17:51:06 +00:00
if [ [ \" \$ @\" = ~ ( ^| ) -runs= [ 0-9] +( $| ) ] ] ; then
mem_settings = '-Xmx1900m:-Xss900k'
else
mem_settings = '-Xmx2048m:-Xss1024k'
fi
2022-08-29 23:20:50 +00:00
LD_LIBRARY_PATH = \" $JVM_LD_LIBRARY_PATH \" :\$ this_dir \
\$ this_dir/jazzer_driver --agent_path= \$ this_dir/jazzer_agent_deploy.jar \
--cp= $RUNTIME_CLASSPATH \
--target_class= $fuzzer_basename \
2022-10-19 17:51:06 +00:00
--jvm_args= \" \$ mem_settings\" \
2022-08-29 23:20:50 +00:00
\$ @" > $OUT / $fuzzer_basename
chmod u+x $OUT /$fuzzer_basename
2022-10-19 17:51:06 +00:00
done