From 7e932d0a82484b0e6f236d181b7d353bb466740a Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 12 Apr 2026 11:50:33 +0100 Subject: [PATCH 01/42] Add pypy3 fuzzer --- projects/pypy3/Dockerfile | 12 +++++++++++ projects/pypy3/build.sh | 42 +++++++++++++++++++++++++++++++++++++ projects/pypy3/project.yaml | 12 +++++++++++ projects/pypy3/run_tests.sh | 2 ++ 4 files changed, 68 insertions(+) create mode 100644 projects/pypy3/Dockerfile create mode 100644 projects/pypy3/build.sh create mode 100644 projects/pypy3/project.yaml create mode 100644 projects/pypy3/run_tests.sh diff --git a/projects/pypy3/Dockerfile b/projects/pypy3/Dockerfile new file mode 100644 index 000000000000..7b51e0e5caf6 --- /dev/null +++ b/projects/pypy3/Dockerfile @@ -0,0 +1,12 @@ +FROM gcr.io/oss-fuzz-base/base-builder + +RUN apt-get update && \ + apt-get install -y build-essential libncursesw5-dev \ + libreadline-dev libssl-dev libgdbm-dev \ + libc6-dev libsqlite3-dev tk-dev libbz2-dev \ + zlib1g-dev libffi-dev pkg-config liblzma-dev + +RUN git clone --depth 1 --branch main https://github.com/pypy/pypy.git pypy +RUN git clone --depth 1 --branch main https://github.com/StanFromIreland/pypy-fuzz.git +WORKDIR pypy +COPY build.sh $SRC/ diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh new file mode 100644 index 000000000000..733b28253762 --- /dev/null +++ b/projects/pypy3/build.sh @@ -0,0 +1,42 @@ +#!/bin/bash -eu + +export ASAN_OPTIONS="detect_leaks=0" +CFLAGS=${CFLAGS//"-pthread"/} + +export PYPY_INSTALL_PATH=$SRC/pypy-install +mkdir -p $PYPY_INSTALL_PATH + +cd $SRC/pypy + +python3 rpython/bin/rpython --opt=2 --shared \ + pypy/goal/targetpypystandalone.py + +# Install +PYPY_EXE=$(ls pypy/goal/pypy3*-c | head -1) +PYPY_LIB=$(ls pypy/goal/libpypy3*-c.so | head -1) +mkdir -p $PYPY_INSTALL_PATH/{bin,lib} +cp "$PYPY_EXE" $PYPY_INSTALL_PATH/bin/pypy3 +cp "$PYPY_LIB" $PYPY_INSTALL_PATH/lib/ +ln -sf "$(basename "$PYPY_LIB")" $PYPY_INSTALL_PATH/lib/libpypy3-c.so +cp -r lib-python/3 $PYPY_INSTALL_PATH/lib-python/3 +cp -r lib_pypy $PYPY_INSTALL_PATH/lib_pypy +cp -r include $PYPY_INSTALL_PATH/include + +PYPY=$PYPY_INSTALL_PATH/bin/pypy3 +cd $SRC/pypy-fuzz + +while read -r name; do + $PYPY build_cffi_fuzz.py "$name" + $CC $CFLAGS fuzzer_stub.c -L. -l_pypy_fuzz_${name} \ + $LIB_FUZZING_ENGINE -rdynamic -ldl -o fuzzer-${name} + + cp fuzzer-${name} _pypy_fuzz_${name}.so fuzz_${name}.py $OUT/ + if [ -d "corp-${name}" ]; then + zip -j "$OUT/fuzzer-${name}_seed_corpus.zip" corp-${name}/* + fi + if [ -f "fuzzer-${name}.dict" ]; then + cp "fuzzer-${name}.dict" "$OUT/" + fi +done < fuzz_targets.txt + +cp -R $PYPY_INSTALL_PATH $OUT/ diff --git a/projects/pypy3/project.yaml b/projects/pypy3/project.yaml new file mode 100644 index 000000000000..13983c733525 --- /dev/null +++ b/projects/pypy3/project.yaml @@ -0,0 +1,12 @@ +homepage: "https://pypy.org/" +language: c +main_repo: "https://github.com/pypy/pypy" +auto_ccs: + - "stanulbrych@gmail.com" +fuzzing_engines: + - afl + - honggfuzz + - libfuzzer +sanitizers: + - address + - undefined diff --git a/projects/pypy3/run_tests.sh b/projects/pypy3/run_tests.sh new file mode 100644 index 000000000000..05a7907cf5a4 --- /dev/null +++ b/projects/pypy3/run_tests.sh @@ -0,0 +1,2 @@ +#!/bin/bash + From c15ad504088c6c895fa473efa204d18368592c3f Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 12 Apr 2026 11:51:00 +0100 Subject: [PATCH 02/42] fix branch --- projects/pypy3/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/pypy3/Dockerfile b/projects/pypy3/Dockerfile index 7b51e0e5caf6..4a9f8a30a7dc 100644 --- a/projects/pypy3/Dockerfile +++ b/projects/pypy3/Dockerfile @@ -6,7 +6,7 @@ RUN apt-get update && \ libc6-dev libsqlite3-dev tk-dev libbz2-dev \ zlib1g-dev libffi-dev pkg-config liblzma-dev -RUN git clone --depth 1 --branch main https://github.com/pypy/pypy.git pypy +RUN git clone --depth 1 --branch py3.11 https://github.com/pypy/pypy.git pypy RUN git clone --depth 1 --branch main https://github.com/StanFromIreland/pypy-fuzz.git WORKDIR pypy COPY build.sh $SRC/ From 730e5c927236dbeed920564aa9855c9b98dc852c Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 12 Apr 2026 12:02:56 +0100 Subject: [PATCH 03/42] use pypy --- projects/pypy3/Dockerfile | 3 ++- projects/pypy3/build.sh | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/projects/pypy3/Dockerfile b/projects/pypy3/Dockerfile index 4a9f8a30a7dc..c43be711ad7e 100644 --- a/projects/pypy3/Dockerfile +++ b/projects/pypy3/Dockerfile @@ -4,7 +4,8 @@ RUN apt-get update && \ apt-get install -y build-essential libncursesw5-dev \ libreadline-dev libssl-dev libgdbm-dev \ libc6-dev libsqlite3-dev tk-dev libbz2-dev \ - zlib1g-dev libffi-dev pkg-config liblzma-dev + zlib1g-dev libffi-dev pkg-config liblzma-dev \ + pypy RUN git clone --depth 1 --branch py3.11 https://github.com/pypy/pypy.git pypy RUN git clone --depth 1 --branch main https://github.com/StanFromIreland/pypy-fuzz.git diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index 733b28253762..8a629a5c767c 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -8,7 +8,7 @@ mkdir -p $PYPY_INSTALL_PATH cd $SRC/pypy -python3 rpython/bin/rpython --opt=2 --shared \ +pypy rpython/bin/rpython --opt=2 --shared \ pypy/goal/targetpypystandalone.py # Install From a952f0adce563e88461f59dfe9606dba7b207c85 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 12 Apr 2026 12:11:05 +0100 Subject: [PATCH 04/42] fix flags --- projects/pypy3/Dockerfile | 8 ++++---- projects/pypy3/build.sh | 26 +++++++++++--------------- 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/projects/pypy3/Dockerfile b/projects/pypy3/Dockerfile index c43be711ad7e..e916ac9c45cd 100644 --- a/projects/pypy3/Dockerfile +++ b/projects/pypy3/Dockerfile @@ -1,10 +1,10 @@ FROM gcr.io/oss-fuzz-base/base-builder RUN apt-get update && \ - apt-get install -y build-essential libncursesw5-dev \ - libreadline-dev libssl-dev libgdbm-dev \ - libc6-dev libsqlite3-dev tk-dev libbz2-dev \ - zlib1g-dev libffi-dev pkg-config liblzma-dev \ + apt-get install -y gcc make libffi-dev pkg-config \ + zlib1g-dev libbz2-dev libsqlite3-dev libncurses5-dev \ + libexpat1-dev libssl-dev libgdbm-dev tk-dev libgc-dev \ + liblzma-dev libncursesw5-dev \ pypy RUN git clone --depth 1 --branch py3.11 https://github.com/pypy/pypy.git pypy diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index 8a629a5c767c..5cf2241ef2f1 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -3,28 +3,24 @@ export ASAN_OPTIONS="detect_leaks=0" CFLAGS=${CFLAGS//"-pthread"/} +PYPY_CFLAGS="${CFLAGS//-fsanitize=fuzzer-no-link/}" +PYPY_CFLAGS="${PYPY_CFLAGS//-fno-sanitize=function/}" + export PYPY_INSTALL_PATH=$SRC/pypy-install mkdir -p $PYPY_INSTALL_PATH -cd $SRC/pypy - -pypy rpython/bin/rpython --opt=2 --shared \ - pypy/goal/targetpypystandalone.py +cd $SRC/pypy/pypy/goal +CFLAGS="$PYPY_CFLAGS" pypy ../../rpython/bin/rpython --opt=2 --shared -# Install -PYPY_EXE=$(ls pypy/goal/pypy3*-c | head -1) -PYPY_LIB=$(ls pypy/goal/libpypy3*-c.so | head -1) -mkdir -p $PYPY_INSTALL_PATH/{bin,lib} -cp "$PYPY_EXE" $PYPY_INSTALL_PATH/bin/pypy3 -cp "$PYPY_LIB" $PYPY_INSTALL_PATH/lib/ -ln -sf "$(basename "$PYPY_LIB")" $PYPY_INSTALL_PATH/lib/libpypy3-c.so -cp -r lib-python/3 $PYPY_INSTALL_PATH/lib-python/3 -cp -r lib_pypy $PYPY_INSTALL_PATH/lib_pypy -cp -r include $PYPY_INSTALL_PATH/include +cd $SRC/pypy +pypy pypy/tool/release/package.py \ + --archive-name=pypy-built \ + --targetdir=/tmp/pypy-pkg +tar xf /tmp/pypy-pkg/pypy-built.tar.bz2 -C $PYPY_INSTALL_PATH --strip-components=1 PYPY=$PYPY_INSTALL_PATH/bin/pypy3 -cd $SRC/pypy-fuzz +cd $SRC/pypy-fuzz while read -r name; do $PYPY build_cffi_fuzz.py "$name" $CC $CFLAGS fuzzer_stub.c -L. -l_pypy_fuzz_${name} \ From 8fa887f82ccb6221b98d9c53b5fa53e809b12499 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 12 Apr 2026 12:14:13 +0100 Subject: [PATCH 05/42] fix flags again --- projects/pypy3/build.sh | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index 5cf2241ef2f1..af333323f410 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -3,14 +3,11 @@ export ASAN_OPTIONS="detect_leaks=0" CFLAGS=${CFLAGS//"-pthread"/} -PYPY_CFLAGS="${CFLAGS//-fsanitize=fuzzer-no-link/}" -PYPY_CFLAGS="${PYPY_CFLAGS//-fno-sanitize=function/}" - export PYPY_INSTALL_PATH=$SRC/pypy-install mkdir -p $PYPY_INSTALL_PATH cd $SRC/pypy/pypy/goal -CFLAGS="$PYPY_CFLAGS" pypy ../../rpython/bin/rpython --opt=2 --shared +CC=clang CFLAGS="" pypy ../../rpython/bin/rpython --opt=2 --shared cd $SRC/pypy pypy pypy/tool/release/package.py \ From 670b1dde0686bf86b7faacbe6ea8a02a0560085e Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 12 Apr 2026 12:35:56 +0100 Subject: [PATCH 06/42] fix flags again * 2 --- projects/pypy3/build.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index af333323f410..2fe5622c38ba 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -1,7 +1,7 @@ #!/bin/bash -eu export ASAN_OPTIONS="detect_leaks=0" -CFLAGS=${CFLAGS//"-pthread"/} +FUZZ_CFLAGS=${CFLAGS//"-pthread"/} export PYPY_INSTALL_PATH=$SRC/pypy-install mkdir -p $PYPY_INSTALL_PATH @@ -10,7 +10,7 @@ cd $SRC/pypy/pypy/goal CC=clang CFLAGS="" pypy ../../rpython/bin/rpython --opt=2 --shared cd $SRC/pypy -pypy pypy/tool/release/package.py \ +CC=clang CFLAGS="" pypy pypy/tool/release/package.py \ --archive-name=pypy-built \ --targetdir=/tmp/pypy-pkg tar xf /tmp/pypy-pkg/pypy-built.tar.bz2 -C $PYPY_INSTALL_PATH --strip-components=1 @@ -20,7 +20,7 @@ PYPY=$PYPY_INSTALL_PATH/bin/pypy3 cd $SRC/pypy-fuzz while read -r name; do $PYPY build_cffi_fuzz.py "$name" - $CC $CFLAGS fuzzer_stub.c -L. -l_pypy_fuzz_${name} \ + $CC $FUZZ_CFLAGS fuzzer_stub.c -L. -l_pypy_fuzz_${name} \ $LIB_FUZZING_ENGINE -rdynamic -ldl -o fuzzer-${name} cp fuzzer-${name} _pypy_fuzz_${name}.so fuzz_${name}.py $OUT/ From 8b915a0a8616df806a2c52d86cb34c0dcc152a61 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 12 Apr 2026 12:59:23 +0100 Subject: [PATCH 07/42] fix install --- projects/pypy3/build.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index 2fe5622c38ba..eefdeeaf9ed6 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -10,6 +10,7 @@ cd $SRC/pypy/pypy/goal CC=clang CFLAGS="" pypy ../../rpython/bin/rpython --opt=2 --shared cd $SRC/pypy +mkdir -p /tmp/pypy-pkg CC=clang CFLAGS="" pypy pypy/tool/release/package.py \ --archive-name=pypy-built \ --targetdir=/tmp/pypy-pkg From d417eb627e9485283f4de21a23858a09c702fa3d Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 12 Apr 2026 13:32:41 +0100 Subject: [PATCH 08/42] Build fuzzers with clang --- projects/pypy3/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index eefdeeaf9ed6..806b13ffc7e6 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -20,7 +20,7 @@ PYPY=$PYPY_INSTALL_PATH/bin/pypy3 cd $SRC/pypy-fuzz while read -r name; do - $PYPY build_cffi_fuzz.py "$name" + CC=clang CFLAGS="" $PYPY build_cffi_fuzz.py "$name" $CC $FUZZ_CFLAGS fuzzer_stub.c -L. -l_pypy_fuzz_${name} \ $LIB_FUZZING_ENGINE -rdynamic -ldl -o fuzzer-${name} From 0eea6911605bab1d1c1ced3c3f1d001c40e03252 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 12 Apr 2026 13:56:57 +0100 Subject: [PATCH 09/42] try some symlinks --- projects/pypy3/build.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index 806b13ffc7e6..b54d7564f94b 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -15,8 +15,10 @@ CC=clang CFLAGS="" pypy pypy/tool/release/package.py \ --archive-name=pypy-built \ --targetdir=/tmp/pypy-pkg tar xf /tmp/pypy-pkg/pypy-built.tar.bz2 -C $PYPY_INSTALL_PATH --strip-components=1 +ln -sf libpypy3.11-c.so $PYPY_INSTALL_PATH/lib/libpypy3-c.so PYPY=$PYPY_INSTALL_PATH/bin/pypy3 +export LIBRARY_PATH=$PYPY_INSTALL_PATH/lib cd $SRC/pypy-fuzz while read -r name; do From 262e3378e06cf18ae9707c523e1acf904c17967c Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 12 Apr 2026 14:24:06 +0100 Subject: [PATCH 10/42] fix that symlink:-/ --- projects/pypy3/build.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index b54d7564f94b..8f62324fee4b 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -15,7 +15,8 @@ CC=clang CFLAGS="" pypy pypy/tool/release/package.py \ --archive-name=pypy-built \ --targetdir=/tmp/pypy-pkg tar xf /tmp/pypy-pkg/pypy-built.tar.bz2 -C $PYPY_INSTALL_PATH --strip-components=1 -ln -sf libpypy3.11-c.so $PYPY_INSTALL_PATH/lib/libpypy3-c.so +ln -sf $PYPY_INSTALL_PATH/lib/libpypy3.11-c.so $PYPY_INSTALL_PATH/lib/libpypy3-c.so +ln -sf $PYPY_INSTALL_PATH/lib/libpypy3.11-c.so $PYPY_INSTALL_PATH/bin/libpypy3-c.so PYPY=$PYPY_INSTALL_PATH/bin/pypy3 export LIBRARY_PATH=$PYPY_INSTALL_PATH/lib From 24da6ef7fa34f9876ab4116c60497fb7680f1c2a Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 12 Apr 2026 15:21:05 +0100 Subject: [PATCH 11/42] fix paths --- projects/pypy3/build.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index 8f62324fee4b..426caea9a338 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -15,11 +15,9 @@ CC=clang CFLAGS="" pypy pypy/tool/release/package.py \ --archive-name=pypy-built \ --targetdir=/tmp/pypy-pkg tar xf /tmp/pypy-pkg/pypy-built.tar.bz2 -C $PYPY_INSTALL_PATH --strip-components=1 -ln -sf $PYPY_INSTALL_PATH/lib/libpypy3.11-c.so $PYPY_INSTALL_PATH/lib/libpypy3-c.so -ln -sf $PYPY_INSTALL_PATH/lib/libpypy3.11-c.so $PYPY_INSTALL_PATH/bin/libpypy3-c.so +ln -sf libpypy3.11-c.so $PYPY_INSTALL_PATH/bin/libpypy3-c.so PYPY=$PYPY_INSTALL_PATH/bin/pypy3 -export LIBRARY_PATH=$PYPY_INSTALL_PATH/lib cd $SRC/pypy-fuzz while read -r name; do From 0739b5779202b63cfd5439081bb1de1d4b35f238 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 12 Apr 2026 15:44:39 +0100 Subject: [PATCH 12/42] link directly against the .so --- projects/pypy3/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index 426caea9a338..52bb17a5c039 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -22,7 +22,7 @@ PYPY=$PYPY_INSTALL_PATH/bin/pypy3 cd $SRC/pypy-fuzz while read -r name; do CC=clang CFLAGS="" $PYPY build_cffi_fuzz.py "$name" - $CC $FUZZ_CFLAGS fuzzer_stub.c -L. -l_pypy_fuzz_${name} \ + $CC $FUZZ_CFLAGS fuzzer_stub.c ./_pypy_fuzz_${name}.so \ $LIB_FUZZING_ENGINE -rdynamic -ldl -o fuzzer-${name} cp fuzzer-${name} _pypy_fuzz_${name}.so fuzz_${name}.py $OUT/ From 22b40a30e3820c185e61e2fd98fc68a8b506e6f9 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 12 Apr 2026 16:14:58 +0100 Subject: [PATCH 13/42] link during fuzzer build too --- projects/pypy3/build.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index 52bb17a5c039..14ec5c7eb6d6 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -23,6 +23,7 @@ cd $SRC/pypy-fuzz while read -r name; do CC=clang CFLAGS="" $PYPY build_cffi_fuzz.py "$name" $CC $FUZZ_CFLAGS fuzzer_stub.c ./_pypy_fuzz_${name}.so \ + -L$PYPY_INSTALL_PATH/bin -lpypy3-c \ $LIB_FUZZING_ENGINE -rdynamic -ldl -o fuzzer-${name} cp fuzzer-${name} _pypy_fuzz_${name}.so fuzz_${name}.py $OUT/ From 7194bb7edb826a9e25b0f2c0eaa6dc4366904042 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 12 Apr 2026 16:48:08 +0100 Subject: [PATCH 14/42] Add libs --- projects/pypy3/build.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index 14ec5c7eb6d6..50e040c66425 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -24,6 +24,7 @@ while read -r name; do CC=clang CFLAGS="" $PYPY build_cffi_fuzz.py "$name" $CC $FUZZ_CFLAGS fuzzer_stub.c ./_pypy_fuzz_${name}.so \ -L$PYPY_INSTALL_PATH/bin -lpypy3-c \ + -Wl,-rpath,'\$ORIGIN/pypy-install/bin' -Wl,-rpath,'\$ORIGIN' \ $LIB_FUZZING_ENGINE -rdynamic -ldl -o fuzzer-${name} cp fuzzer-${name} _pypy_fuzz_${name}.so fuzz_${name}.py $OUT/ From 4ce00a321c6b2d1e422e6fb7a7e391b8bbcd51e8 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 12 Apr 2026 17:17:16 +0100 Subject: [PATCH 15/42] Copy libpypy3-c.so to OUT --- projects/pypy3/build.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index 50e040c66425..a1f64610efea 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -24,10 +24,11 @@ while read -r name; do CC=clang CFLAGS="" $PYPY build_cffi_fuzz.py "$name" $CC $FUZZ_CFLAGS fuzzer_stub.c ./_pypy_fuzz_${name}.so \ -L$PYPY_INSTALL_PATH/bin -lpypy3-c \ - -Wl,-rpath,'\$ORIGIN/pypy-install/bin' -Wl,-rpath,'\$ORIGIN' \ + -Wl,-rpath,'$ORIGIN' \ $LIB_FUZZING_ENGINE -rdynamic -ldl -o fuzzer-${name} cp fuzzer-${name} _pypy_fuzz_${name}.so fuzz_${name}.py $OUT/ + cp $PYPY_INSTALL_PATH/bin/libpypy3.11-c.so $OUT/libpypy3-c.so if [ -d "corp-${name}" ]; then zip -j "$OUT/fuzzer-${name}_seed_corpus.zip" corp-${name}/* fi From 01091a91ca83b620ca0bd6ad73ed26618914f984 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 12 Apr 2026 17:56:27 +0100 Subject: [PATCH 16/42] actually instrument --- projects/pypy3/build.sh | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index a1f64610efea..62b0c0928be1 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -1,17 +1,18 @@ #!/bin/bash -eu export ASAN_OPTIONS="detect_leaks=0" -FUZZ_CFLAGS=${CFLAGS//"-pthread"/} +export CC=clang +CFLAGS=${CFLAGS//-fsanitize=fuzzer-no-link/} export PYPY_INSTALL_PATH=$SRC/pypy-install mkdir -p $PYPY_INSTALL_PATH cd $SRC/pypy/pypy/goal -CC=clang CFLAGS="" pypy ../../rpython/bin/rpython --opt=2 --shared +pypy ../../rpython/bin/rpython --opt=2 --shared cd $SRC/pypy mkdir -p /tmp/pypy-pkg -CC=clang CFLAGS="" pypy pypy/tool/release/package.py \ +pypy pypy/tool/release/package.py \ --archive-name=pypy-built \ --targetdir=/tmp/pypy-pkg tar xf /tmp/pypy-pkg/pypy-built.tar.bz2 -C $PYPY_INSTALL_PATH --strip-components=1 @@ -21,8 +22,8 @@ PYPY=$PYPY_INSTALL_PATH/bin/pypy3 cd $SRC/pypy-fuzz while read -r name; do - CC=clang CFLAGS="" $PYPY build_cffi_fuzz.py "$name" - $CC $FUZZ_CFLAGS fuzzer_stub.c ./_pypy_fuzz_${name}.so \ + $PYPY build_cffi_fuzz.py "$name" + $CC $CFLAGS fuzzer_stub.c ./_pypy_fuzz_${name}.so \ -L$PYPY_INSTALL_PATH/bin -lpypy3-c \ -Wl,-rpath,'$ORIGIN' \ $LIB_FUZZING_ENGINE -rdynamic -ldl -o fuzzer-${name} From d9fd7f79234f7bcee9d6a5f571a4041a18b95e8e Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 12 Apr 2026 18:04:40 +0100 Subject: [PATCH 17/42] !fixup that last one --- projects/pypy3/build.sh | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index 62b0c0928be1..9bd7f4c5daeb 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -1,8 +1,15 @@ #!/bin/bash -eu export ASAN_OPTIONS="detect_leaks=0" -export CC=clang -CFLAGS=${CFLAGS//-fsanitize=fuzzer-no-link/} + +case $SANITIZER in + address) SAN=-fsanitize=address ;; + undefined) SAN=-fsanitize=undefined ;; + *) SAN="" ;; +esac + +export CC="clang $SAN" +CFLAGS=$(echo "$CFLAGS" | sed 's/-f[no-]*sanitize[^ ]*//g') export PYPY_INSTALL_PATH=$SRC/pypy-install mkdir -p $PYPY_INSTALL_PATH @@ -23,7 +30,7 @@ PYPY=$PYPY_INSTALL_PATH/bin/pypy3 cd $SRC/pypy-fuzz while read -r name; do $PYPY build_cffi_fuzz.py "$name" - $CC $CFLAGS fuzzer_stub.c ./_pypy_fuzz_${name}.so \ + $CC $CFLAGS -fsanitize=fuzzer-no-link fuzzer_stub.c ./_pypy_fuzz_${name}.so \ -L$PYPY_INSTALL_PATH/bin -lpypy3-c \ -Wl,-rpath,'$ORIGIN' \ $LIB_FUZZING_ENGINE -rdynamic -ldl -o fuzzer-${name} From 799c2f79043d4ac1f64322941cb4871a5de8d631 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 12 Apr 2026 18:07:57 +0100 Subject: [PATCH 18/42] Work around RPython --- projects/pypy3/build.sh | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index 9bd7f4c5daeb..68318ee94796 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -8,7 +8,14 @@ case $SANITIZER in *) SAN="" ;; esac -export CC="clang $SAN" +# Funky way to work around RPython +cat > /usr/local/bin/pypy-cc < Date: Sun, 12 Apr 2026 18:13:52 +0100 Subject: [PATCH 19/42] Try w ``-shared-libsan` --- projects/pypy3/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index 68318ee94796..e080abc8285e 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -11,7 +11,7 @@ esac # Funky way to work around RPython cat > /usr/local/bin/pypy-cc < Date: Sun, 12 Apr 2026 18:17:11 +0100 Subject: [PATCH 20/42] ubsan_standalone to path --- projects/pypy3/build.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index e080abc8285e..c77dd3c1c49f 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -17,6 +17,8 @@ chmod +x /usr/local/bin/pypy-cc export CC=pypy-cc CFLAGS=$(echo "$CFLAGS" | sed 's/-f[no-]*sanitize[^ ]*//g') +CLANG_RT_DIR=$(dirname $(find /usr/lib -name 'libclang_rt.ubsan_standalone*.so' 2>/dev/null | head -1)) +export LD_LIBRARY_PATH=${CLANG_RT_DIR:+$CLANG_RT_DIR:}${LD_LIBRARY_PATH:-} export PYPY_INSTALL_PATH=$SRC/pypy-install mkdir -p $PYPY_INSTALL_PATH From fd373b598427dec89c80290b52b7c0e7d2cce2c5 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 12 Apr 2026 18:21:00 +0100 Subject: [PATCH 21/42] another workaround --- projects/pypy3/build.sh | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index c77dd3c1c49f..70c09a755437 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -8,24 +8,25 @@ case $SANITIZER in *) SAN="" ;; esac -# Funky way to work around RPython -cat > /usr/local/bin/pypy-cc </dev/null | head -1)) -export LD_LIBRARY_PATH=${CLANG_RT_DIR:+$CLANG_RT_DIR:}${LD_LIBRARY_PATH:-} export PYPY_INSTALL_PATH=$SRC/pypy-install mkdir -p $PYPY_INSTALL_PATH cd $SRC/pypy/pypy/goal -pypy ../../rpython/bin/rpython --opt=2 --shared - +CC=clang pypy ../../rpython/bin/rpython --opt=2 --shared + +# recompile generated C with sanitizers +if [ -n "$SAN" ]; then + BUILD_DIR=$(dirname $(find /tmp/usession-py3.11-* -name 'Makefile' | head -1)) + find $BUILD_DIR -name '*.o' -delete + rm -f pypy3*-c libpypy3*-c.so + make -C $BUILD_DIR "CC=clang $SAN" + cp $BUILD_DIR/pypy3*-c $BUILD_DIR/libpypy3*-c.so . +fi + +# Package +export CC=clang cd $SRC/pypy mkdir -p /tmp/pypy-pkg pypy pypy/tool/release/package.py \ @@ -36,10 +37,11 @@ ln -sf libpypy3.11-c.so $PYPY_INSTALL_PATH/bin/libpypy3-c.so PYPY=$PYPY_INSTALL_PATH/bin/pypy3 +# Build fuzz targets cd $SRC/pypy-fuzz while read -r name; do $PYPY build_cffi_fuzz.py "$name" - $CC $CFLAGS -fsanitize=fuzzer-no-link fuzzer_stub.c ./_pypy_fuzz_${name}.so \ + clang $SAN $CFLAGS -fsanitize=fuzzer-no-link fuzzer_stub.c ./_pypy_fuzz_${name}.so \ -L$PYPY_INSTALL_PATH/bin -lpypy3-c \ -Wl,-rpath,'$ORIGIN' \ $LIB_FUZZING_ENGINE -rdynamic -ldl -o fuzzer-${name} From 4f31f7e97088d7740adb89fce2ee881569105988 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 12 Apr 2026 19:22:17 +0100 Subject: [PATCH 22/42] less rebuilding --- projects/pypy3/build.sh | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index 70c09a755437..e4d6e8e18888 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -14,16 +14,11 @@ export PYPY_INSTALL_PATH=$SRC/pypy-install mkdir -p $PYPY_INSTALL_PATH cd $SRC/pypy/pypy/goal -CC=clang pypy ../../rpython/bin/rpython --opt=2 --shared +CC=clang pypy ../../rpython/bin/rpython --opt=2 --shared --source -# recompile generated C with sanitizers -if [ -n "$SAN" ]; then - BUILD_DIR=$(dirname $(find /tmp/usession-py3.11-* -name 'Makefile' | head -1)) - find $BUILD_DIR -name '*.o' -delete - rm -f pypy3*-c libpypy3*-c.so - make -C $BUILD_DIR "CC=clang $SAN" - cp $BUILD_DIR/pypy3*-c $BUILD_DIR/libpypy3*-c.so . -fi +BUILD_DIR=$(dirname $(find /tmp/usession-py3.11-* -name 'Makefile' | head -1)) +make -j$(nproc) -C $BUILD_DIR "CC=clang $SAN" +cp $BUILD_DIR/pypy3*-c $BUILD_DIR/libpypy3*-c.so . # Package export CC=clang @@ -35,6 +30,7 @@ pypy pypy/tool/release/package.py \ tar xf /tmp/pypy-pkg/pypy-built.tar.bz2 -C $PYPY_INSTALL_PATH --strip-components=1 ln -sf libpypy3.11-c.so $PYPY_INSTALL_PATH/bin/libpypy3-c.so +export LD_LIBRARY_PATH=$PYPY_INSTALL_PATH/bin PYPY=$PYPY_INSTALL_PATH/bin/pypy3 # Build fuzz targets From 98113a4478fc5087646188698453dbc62d99bc8b Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 12 Apr 2026 19:49:24 +0100 Subject: [PATCH 23/42] Empty CFLAGS for Packaging --- projects/pypy3/build.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index e4d6e8e18888..c4d085a4ad73 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -21,10 +21,9 @@ make -j$(nproc) -C $BUILD_DIR "CC=clang $SAN" cp $BUILD_DIR/pypy3*-c $BUILD_DIR/libpypy3*-c.so . # Package -export CC=clang cd $SRC/pypy mkdir -p /tmp/pypy-pkg -pypy pypy/tool/release/package.py \ +CC=clang CFLAGS="" pypy pypy/tool/release/package.py \ --archive-name=pypy-built \ --targetdir=/tmp/pypy-pkg tar xf /tmp/pypy-pkg/pypy-built.tar.bz2 -C $PYPY_INSTALL_PATH --strip-components=1 From ee06722137f73d267f905b1216f57ba8b1d1af99 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 12 Apr 2026 20:24:14 +0100 Subject: [PATCH 24/42] install a 'lil more --- projects/pypy3/build.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index c4d085a4ad73..2d5dc7d5c42b 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -27,6 +27,7 @@ CC=clang CFLAGS="" pypy pypy/tool/release/package.py \ --archive-name=pypy-built \ --targetdir=/tmp/pypy-pkg tar xf /tmp/pypy-pkg/pypy-built.tar.bz2 -C $PYPY_INSTALL_PATH --strip-components=1 +cp $SRC/pypy/pypy/goal/libpypy3*-c.so $PYPY_INSTALL_PATH/bin/ ln -sf libpypy3.11-c.so $PYPY_INSTALL_PATH/bin/libpypy3-c.so export LD_LIBRARY_PATH=$PYPY_INSTALL_PATH/bin From 960a7002a619a215941ed51deb190f09e6353e91 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 12 Apr 2026 20:59:04 +0100 Subject: [PATCH 25/42] `build_cffi_fuzz.py` uses gcc --- projects/pypy3/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index 2d5dc7d5c42b..916dece58d4f 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -36,7 +36,7 @@ PYPY=$PYPY_INSTALL_PATH/bin/pypy3 # Build fuzz targets cd $SRC/pypy-fuzz while read -r name; do - $PYPY build_cffi_fuzz.py "$name" + CC=clang CFLAGS="" $PYPY build_cffi_fuzz.py "$name" clang $SAN $CFLAGS -fsanitize=fuzzer-no-link fuzzer_stub.c ./_pypy_fuzz_${name}.so \ -L$PYPY_INSTALL_PATH/bin -lpypy3-c \ -Wl,-rpath,'$ORIGIN' \ From 8c7a6c0c77ef08250177023fc147e78b98f11bac Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 12 Apr 2026 21:52:44 +0100 Subject: [PATCH 26/42] instrument the fuzzer itself --- projects/pypy3/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index 916dece58d4f..b44320f7e520 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -36,7 +36,7 @@ PYPY=$PYPY_INSTALL_PATH/bin/pypy3 # Build fuzz targets cd $SRC/pypy-fuzz while read -r name; do - CC=clang CFLAGS="" $PYPY build_cffi_fuzz.py "$name" + CC=clang CFLAGS="$SAN" LDSHARED="clang -shared $SAN" $PYPY build_cffi_fuzz.py "$name" clang $SAN $CFLAGS -fsanitize=fuzzer-no-link fuzzer_stub.c ./_pypy_fuzz_${name}.so \ -L$PYPY_INSTALL_PATH/bin -lpypy3-c \ -Wl,-rpath,'$ORIGIN' \ From 9a40d371e09a3ca4c7c85cf9177dc41aba6fe8da Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 12 Apr 2026 23:01:56 +0100 Subject: [PATCH 27/42] unlimit stack for ASAN builds --- projects/pypy3/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index b44320f7e520..c375fe0d9709 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -3,7 +3,7 @@ export ASAN_OPTIONS="detect_leaks=0" case $SANITIZER in - address) SAN=-fsanitize=address ;; + address) SAN=-fsanitize=address; ulimit -s unlimited ;; undefined) SAN=-fsanitize=undefined ;; *) SAN="" ;; esac From 57336dfd21a38a58e2aa9dafe76615170de80e18 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 12 Apr 2026 23:09:39 +0100 Subject: [PATCH 28/42] unlimit stack for ASAN builds --- projects/pypy3/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index c375fe0d9709..b7e4eb1e7678 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -42,7 +42,7 @@ while read -r name; do -Wl,-rpath,'$ORIGIN' \ $LIB_FUZZING_ENGINE -rdynamic -ldl -o fuzzer-${name} - cp fuzzer-${name} _pypy_fuzz_${name}.so fuzz_${name}.py $OUT/ + cp fuzzer-${name} _pypy_fuzz_${name}.so fuzz_${name}.py ubsan_suppressions.txt $OUT/ cp $PYPY_INSTALL_PATH/bin/libpypy3.11-c.so $OUT/libpypy3-c.so if [ -d "corp-${name}" ]; then zip -j "$OUT/fuzzer-${name}_seed_corpus.zip" corp-${name}/* From 6a3e6becd2c1193fad981d97c8702a6460944c66 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Mon, 13 Apr 2026 16:50:49 +0100 Subject: [PATCH 29/42] set ulimit and link statically --- projects/pypy3/build.sh | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index b7e4eb1e7678..30549623e566 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -1,9 +1,10 @@ #!/bin/bash -eu -export ASAN_OPTIONS="detect_leaks=0" +export ASAN_OPTIONS="detect_leaks=0:detect_stack_use_after_return=0" +ulimit -s 65536 case $SANITIZER in - address) SAN=-fsanitize=address; ulimit -s unlimited ;; + address) SAN=-fsanitize=address ;; undefined) SAN=-fsanitize=undefined ;; *) SAN="" ;; esac @@ -18,7 +19,8 @@ CC=clang pypy ../../rpython/bin/rpython --opt=2 --shared --source BUILD_DIR=$(dirname $(find /tmp/usession-py3.11-* -name 'Makefile' | head -1)) make -j$(nproc) -C $BUILD_DIR "CC=clang $SAN" -cp $BUILD_DIR/pypy3*-c $BUILD_DIR/libpypy3*-c.so . +ar rcs $BUILD_DIR/libpypy3-c.a $BUILD_DIR/*.o +cp $BUILD_DIR/pypy3*-c $BUILD_DIR/libpypy3*-c.so $BUILD_DIR/libpypy3-c.a . # Package cd $SRC/pypy @@ -38,12 +40,11 @@ cd $SRC/pypy-fuzz while read -r name; do CC=clang CFLAGS="$SAN" LDSHARED="clang -shared $SAN" $PYPY build_cffi_fuzz.py "$name" clang $SAN $CFLAGS -fsanitize=fuzzer-no-link fuzzer_stub.c ./_pypy_fuzz_${name}.so \ - -L$PYPY_INSTALL_PATH/bin -lpypy3-c \ - -Wl,-rpath,'$ORIGIN' \ - $LIB_FUZZING_ENGINE -rdynamic -ldl -o fuzzer-${name} + $SRC/pypy/pypy/goal/libpypy3-c.a \ + $LIB_FUZZING_ENGINE -rdynamic -ldl -lpthread -lm -lffi -lz -lbz2 -lncursesw -ltinfo -lrt -lutil \ + -o fuzzer-${name} cp fuzzer-${name} _pypy_fuzz_${name}.so fuzz_${name}.py ubsan_suppressions.txt $OUT/ - cp $PYPY_INSTALL_PATH/bin/libpypy3.11-c.so $OUT/libpypy3-c.so if [ -d "corp-${name}" ]; then zip -j "$OUT/fuzzer-${name}_seed_corpus.zip" corp-${name}/* fi From 9505c728d5552c85124170e51cd5d4bb895ef7ec Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Mon, 13 Apr 2026 17:29:13 +0100 Subject: [PATCH 30/42] yay! circular dependencies :-( --- projects/pypy3/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index 30549623e566..e59835ef38d1 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -40,7 +40,7 @@ cd $SRC/pypy-fuzz while read -r name; do CC=clang CFLAGS="$SAN" LDSHARED="clang -shared $SAN" $PYPY build_cffi_fuzz.py "$name" clang $SAN $CFLAGS -fsanitize=fuzzer-no-link fuzzer_stub.c ./_pypy_fuzz_${name}.so \ - $SRC/pypy/pypy/goal/libpypy3-c.a \ + -Wl,--start-group $SRC/pypy/pypy/goal/libpypy3-c.a -Wl,--end-group \ $LIB_FUZZING_ENGINE -rdynamic -ldl -lpthread -lm -lffi -lz -lbz2 -lncursesw -ltinfo -lrt -lutil \ -o fuzzer-${name} From 49dfef2f6ac3614c4a424525581941aa9460aeeb Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Mon, 13 Apr 2026 18:03:58 +0100 Subject: [PATCH 31/42] fixup. still trying to hit that 168 --- projects/pypy3/build.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index e59835ef38d1..5ad93c113c6a 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -40,11 +40,13 @@ cd $SRC/pypy-fuzz while read -r name; do CC=clang CFLAGS="$SAN" LDSHARED="clang -shared $SAN" $PYPY build_cffi_fuzz.py "$name" clang $SAN $CFLAGS -fsanitize=fuzzer-no-link fuzzer_stub.c ./_pypy_fuzz_${name}.so \ - -Wl,--start-group $SRC/pypy/pypy/goal/libpypy3-c.a -Wl,--end-group \ + -Wl,--start-group $SRC/pypy/pypy/goal/libpypy3-c.a -L$PYPY_INSTALL_PATH/bin -lpypy3-c -Wl,--end-group \ $LIB_FUZZING_ENGINE -rdynamic -ldl -lpthread -lm -lffi -lz -lbz2 -lncursesw -ltinfo -lrt -lutil \ + -Wl,-rpath,'$ORIGIN' \ -o fuzzer-${name} cp fuzzer-${name} _pypy_fuzz_${name}.so fuzz_${name}.py ubsan_suppressions.txt $OUT/ + cp $PYPY_INSTALL_PATH/bin/libpypy3.11-c.so $OUT/libpypy3-c.so if [ -d "corp-${name}" ]; then zip -j "$OUT/fuzzer-${name}_seed_corpus.zip" corp-${name}/* fi From fc025ecc73c5677c613614d4f5956917747a58f3 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Mon, 13 Apr 2026 18:54:10 +0100 Subject: [PATCH 32/42] revert that --- projects/pypy3/build.sh | 8 +++----- projects/pypy3/project.yaml | 1 - 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index 5ad93c113c6a..2fd5e1f1eb40 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -19,8 +19,7 @@ CC=clang pypy ../../rpython/bin/rpython --opt=2 --shared --source BUILD_DIR=$(dirname $(find /tmp/usession-py3.11-* -name 'Makefile' | head -1)) make -j$(nproc) -C $BUILD_DIR "CC=clang $SAN" -ar rcs $BUILD_DIR/libpypy3-c.a $BUILD_DIR/*.o -cp $BUILD_DIR/pypy3*-c $BUILD_DIR/libpypy3*-c.so $BUILD_DIR/libpypy3-c.a . +cp $BUILD_DIR/pypy3*-c $BUILD_DIR/libpypy3*-c.so . # Package cd $SRC/pypy @@ -40,10 +39,9 @@ cd $SRC/pypy-fuzz while read -r name; do CC=clang CFLAGS="$SAN" LDSHARED="clang -shared $SAN" $PYPY build_cffi_fuzz.py "$name" clang $SAN $CFLAGS -fsanitize=fuzzer-no-link fuzzer_stub.c ./_pypy_fuzz_${name}.so \ - -Wl,--start-group $SRC/pypy/pypy/goal/libpypy3-c.a -L$PYPY_INSTALL_PATH/bin -lpypy3-c -Wl,--end-group \ - $LIB_FUZZING_ENGINE -rdynamic -ldl -lpthread -lm -lffi -lz -lbz2 -lncursesw -ltinfo -lrt -lutil \ + -L$PYPY_INSTALL_PATH/bin -lpypy3-c \ -Wl,-rpath,'$ORIGIN' \ - -o fuzzer-${name} + $LIB_FUZZING_ENGINE -rdynamic -ldl -o fuzzer-${name} cp fuzzer-${name} _pypy_fuzz_${name}.so fuzz_${name}.py ubsan_suppressions.txt $OUT/ cp $PYPY_INSTALL_PATH/bin/libpypy3.11-c.so $OUT/libpypy3-c.so diff --git a/projects/pypy3/project.yaml b/projects/pypy3/project.yaml index 13983c733525..e9430a1246a8 100644 --- a/projects/pypy3/project.yaml +++ b/projects/pypy3/project.yaml @@ -8,5 +8,4 @@ fuzzing_engines: - honggfuzz - libfuzzer sanitizers: - - address - undefined From 8e5b2d7a819b9c7ee1eb8edd093e9dde24788d38 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Mon, 13 Apr 2026 19:44:43 +0100 Subject: [PATCH 33/42] tidy up now that all works --- projects/pypy3/build.sh | 37 +++++++++++-------------------------- 1 file changed, 11 insertions(+), 26 deletions(-) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index 2fd5e1f1eb40..9b6e9ff87edd 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -1,56 +1,41 @@ #!/bin/bash -eu -export ASAN_OPTIONS="detect_leaks=0:detect_stack_use_after_return=0" -ulimit -s 65536 - case $SANITIZER in address) SAN=-fsanitize=address ;; undefined) SAN=-fsanitize=undefined ;; - *) SAN="" ;; esac CFLAGS=$(echo "$CFLAGS" | sed 's/-f[no-]*sanitize[^ ]*//g') -export PYPY_INSTALL_PATH=$SRC/pypy-install -mkdir -p $PYPY_INSTALL_PATH - cd $SRC/pypy/pypy/goal CC=clang pypy ../../rpython/bin/rpython --opt=2 --shared --source BUILD_DIR=$(dirname $(find /tmp/usession-py3.11-* -name 'Makefile' | head -1)) make -j$(nproc) -C $BUILD_DIR "CC=clang $SAN" cp $BUILD_DIR/pypy3*-c $BUILD_DIR/libpypy3*-c.so . +ln -sf libpypy3.11-c.so libpypy3-c.so -# Package -cd $SRC/pypy -mkdir -p /tmp/pypy-pkg -CC=clang CFLAGS="" pypy pypy/tool/release/package.py \ - --archive-name=pypy-built \ - --targetdir=/tmp/pypy-pkg -tar xf /tmp/pypy-pkg/pypy-built.tar.bz2 -C $PYPY_INSTALL_PATH --strip-components=1 -cp $SRC/pypy/pypy/goal/libpypy3*-c.so $PYPY_INSTALL_PATH/bin/ -ln -sf libpypy3.11-c.so $PYPY_INSTALL_PATH/bin/libpypy3-c.so - -export LD_LIBRARY_PATH=$PYPY_INSTALL_PATH/bin -PYPY=$PYPY_INSTALL_PATH/bin/pypy3 +export LD_LIBRARY_PATH=$SRC/pypy/pypy/goal +PYPY=$SRC/pypy/pypy/goal/pypy3.11-c # Build fuzz targets cd $SRC/pypy-fuzz while read -r name; do CC=clang CFLAGS="$SAN" LDSHARED="clang -shared $SAN" $PYPY build_cffi_fuzz.py "$name" clang $SAN $CFLAGS -fsanitize=fuzzer-no-link fuzzer_stub.c ./_pypy_fuzz_${name}.so \ - -L$PYPY_INSTALL_PATH/bin -lpypy3-c \ - -Wl,-rpath,'$ORIGIN' \ + -L$SRC/pypy/pypy/goal -lpypy3-c -Wl,-rpath,'$ORIGIN' \ $LIB_FUZZING_ENGINE -rdynamic -ldl -o fuzzer-${name} - cp fuzzer-${name} _pypy_fuzz_${name}.so fuzz_${name}.py ubsan_suppressions.txt $OUT/ - cp $PYPY_INSTALL_PATH/bin/libpypy3.11-c.so $OUT/libpypy3-c.so + cp fuzzer-${name} _pypy_fuzz_${name}.so fuzz_${name}.py $OUT/ if [ -d "corp-${name}" ]; then zip -j "$OUT/fuzzer-${name}_seed_corpus.zip" corp-${name}/* fi - if [ -f "fuzzer-${name}.dict" ]; then - cp "fuzzer-${name}.dict" "$OUT/" + if [ -f "dictionaries/fuzzer-${name}.dict" ]; then + cp "dictionaries/fuzzer-${name}.dict" "$OUT/" fi done < fuzz_targets.txt -cp -R $PYPY_INSTALL_PATH $OUT/ +cp $SRC/pypy/pypy/goal/libpypy3.11-c.so $OUT/libpypy3-c.so +cp ubsan_suppressions.txt $OUT/ +cp -R $SRC/pypy/lib-python $OUT/ +cp -R $SRC/pypy/lib_pypy $OUT/ From 9e3fc747d644a8f97f6eb56ee340274a3ed706f9 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Mon, 13 Apr 2026 21:20:17 +0100 Subject: [PATCH 34/42] Add Matti --- projects/pypy3/project.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/projects/pypy3/project.yaml b/projects/pypy3/project.yaml index e9430a1246a8..b02a3c9a5e99 100644 --- a/projects/pypy3/project.yaml +++ b/projects/pypy3/project.yaml @@ -3,6 +3,7 @@ language: c main_repo: "https://github.com/pypy/pypy" auto_ccs: - "stanulbrych@gmail.com" + - "matti.picus@gmail.com" fuzzing_engines: - afl - honggfuzz From b7ae55ac69c112330f8083090b6e0822de263038 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Mon, 13 Apr 2026 21:26:03 +0100 Subject: [PATCH 35/42] Add licenses --- projects/pypy3/Dockerfile | 18 ++++++++++++++++++ projects/pypy3/build.sh | 16 ++++++++++++++++ projects/pypy3/run_tests.sh | 17 ++++++++++++++++- 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/projects/pypy3/Dockerfile b/projects/pypy3/Dockerfile index e916ac9c45cd..0a598ddf54a0 100644 --- a/projects/pypy3/Dockerfile +++ b/projects/pypy3/Dockerfile @@ -1,3 +1,21 @@ +# Copyright 2026 Google Inc. +# Copyright 2026 Stan Ulbrych +# +# 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 && \ diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index 9b6e9ff87edd..dfd97e21000a 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -1,4 +1,20 @@ #!/bin/bash -eu +# Copyright 2026 Google Inc. +# Copyright 2026 Stan Ulbrych +# +# 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. +# +################################################################################ case $SANITIZER in address) SAN=-fsanitize=address ;; diff --git a/projects/pypy3/run_tests.sh b/projects/pypy3/run_tests.sh index 05a7907cf5a4..e906e7c77e9e 100644 --- a/projects/pypy3/run_tests.sh +++ b/projects/pypy3/run_tests.sh @@ -1,2 +1,17 @@ #!/bin/bash - +# Copyright 2026 Google Inc. +# Copyright 2026 Stan Ulbrych +# +# 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 b2c01f8e7118ccfca97c61245821f960e37009aa Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Mon, 13 Apr 2026 21:26:47 +0100 Subject: [PATCH 36/42] Remove me --- projects/pypy3/Dockerfile | 1 - projects/pypy3/build.sh | 1 - projects/pypy3/run_tests.sh | 1 - 3 files changed, 3 deletions(-) diff --git a/projects/pypy3/Dockerfile b/projects/pypy3/Dockerfile index 0a598ddf54a0..e92bb8a12a04 100644 --- a/projects/pypy3/Dockerfile +++ b/projects/pypy3/Dockerfile @@ -1,5 +1,4 @@ # Copyright 2026 Google Inc. -# Copyright 2026 Stan Ulbrych # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index dfd97e21000a..206b988d4874 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -1,6 +1,5 @@ #!/bin/bash -eu # Copyright 2026 Google Inc. -# Copyright 2026 Stan Ulbrych # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/projects/pypy3/run_tests.sh b/projects/pypy3/run_tests.sh index e906e7c77e9e..f1084c7489bf 100644 --- a/projects/pypy3/run_tests.sh +++ b/projects/pypy3/run_tests.sh @@ -1,6 +1,5 @@ #!/bin/bash # Copyright 2026 Google Inc. -# Copyright 2026 Stan Ulbrych # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. From eaaa53a3544743a18fe307ee5139d360b6881c98 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Mon, 13 Apr 2026 21:28:19 +0100 Subject: [PATCH 37/42] Update to LLC --- projects/pypy3/Dockerfile | 3 +-- projects/pypy3/build.sh | 3 +-- projects/pypy3/run_tests.sh | 3 +-- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/projects/pypy3/Dockerfile b/projects/pypy3/Dockerfile index e92bb8a12a04..456bb5ec0f94 100644 --- a/projects/pypy3/Dockerfile +++ b/projects/pypy3/Dockerfile @@ -1,4 +1,4 @@ -# Copyright 2026 Google Inc. +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -11,7 +11,6 @@ # 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. -# ################################################################################ diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index 206b988d4874..924c10cf6f27 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -1,5 +1,5 @@ #!/bin/bash -eu -# Copyright 2026 Google Inc. +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -12,7 +12,6 @@ # 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. -# ################################################################################ case $SANITIZER in diff --git a/projects/pypy3/run_tests.sh b/projects/pypy3/run_tests.sh index f1084c7489bf..82549d3a84ec 100644 --- a/projects/pypy3/run_tests.sh +++ b/projects/pypy3/run_tests.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2026 Google Inc. +# Copyright 2026 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -12,5 +12,4 @@ # 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 d7a7d7f46dac7ee2ac5742649af33b88db402b05 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Mon, 13 Apr 2026 21:59:01 +0100 Subject: [PATCH 38/42] Fix cov; add Carl :-) --- projects/pypy3/build.sh | 1 + projects/pypy3/project.yaml | 1 + 2 files changed, 2 insertions(+) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index 924c10cf6f27..a2b3625d136c 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -17,6 +17,7 @@ case $SANITIZER in address) SAN=-fsanitize=address ;; undefined) SAN=-fsanitize=undefined ;; + *) SAN="" ;; esac CFLAGS=$(echo "$CFLAGS" | sed 's/-f[no-]*sanitize[^ ]*//g') diff --git a/projects/pypy3/project.yaml b/projects/pypy3/project.yaml index b02a3c9a5e99..ecbf9a754e68 100644 --- a/projects/pypy3/project.yaml +++ b/projects/pypy3/project.yaml @@ -4,6 +4,7 @@ main_repo: "https://github.com/pypy/pypy" auto_ccs: - "stanulbrych@gmail.com" - "matti.picus@gmail.com" + - "cfbolz@gmail.com" fuzzing_engines: - afl - honggfuzz From c466480d2b23b49c59667c226696be52381cf126 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Tue, 14 Apr 2026 13:32:52 +0100 Subject: [PATCH 39/42] David's review, we support all engines anyway --- projects/pypy3/project.yaml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/projects/pypy3/project.yaml b/projects/pypy3/project.yaml index ecbf9a754e68..90bd942f4d68 100644 --- a/projects/pypy3/project.yaml +++ b/projects/pypy3/project.yaml @@ -5,9 +5,5 @@ auto_ccs: - "stanulbrych@gmail.com" - "matti.picus@gmail.com" - "cfbolz@gmail.com" -fuzzing_engines: - - afl - - honggfuzz - - libfuzzer sanitizers: - undefined From e785a47a2a1e4470817c1499ddbec1d03035c96f Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Tue, 14 Apr 2026 14:54:27 +0100 Subject: [PATCH 40/42] Use the `lldebug` make target --- projects/pypy3/build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/pypy3/build.sh b/projects/pypy3/build.sh index a2b3625d136c..6775d57b547b 100644 --- a/projects/pypy3/build.sh +++ b/projects/pypy3/build.sh @@ -26,7 +26,7 @@ cd $SRC/pypy/pypy/goal CC=clang pypy ../../rpython/bin/rpython --opt=2 --shared --source BUILD_DIR=$(dirname $(find /tmp/usession-py3.11-* -name 'Makefile' | head -1)) -make -j$(nproc) -C $BUILD_DIR "CC=clang $SAN" +make lldebug -j$(nproc) -C $BUILD_DIR "CC=clang $SAN" cp $BUILD_DIR/pypy3*-c $BUILD_DIR/libpypy3*-c.so . ln -sf libpypy3.11-c.so libpypy3-c.so From b1e75b67835f766393670d19ddeba47d196c3878 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Fri, 15 May 2026 15:46:13 +0100 Subject: [PATCH 41/42] Delete projects/pypy3/run_tests.sh --- projects/pypy3/run_tests.sh | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 projects/pypy3/run_tests.sh diff --git a/projects/pypy3/run_tests.sh b/projects/pypy3/run_tests.sh deleted file mode 100644 index 82549d3a84ec..000000000000 --- a/projects/pypy3/run_tests.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash -# Copyright 2026 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. -################################################################################ From ffee2f0c9b372a8024c555cf178014bd96cd49d9 Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Fri, 29 May 2026 20:09:14 +0100 Subject: [PATCH 42/42] Move Stan to `primary_contact` --- projects/pypy3/project.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/pypy3/project.yaml b/projects/pypy3/project.yaml index 90bd942f4d68..5c350e67803d 100644 --- a/projects/pypy3/project.yaml +++ b/projects/pypy3/project.yaml @@ -1,8 +1,8 @@ homepage: "https://pypy.org/" language: c main_repo: "https://github.com/pypy/pypy" +primary_contact: "stanulbrych@gmail.com" auto_ccs: - - "stanulbrych@gmail.com" - "matti.picus@gmail.com" - "cfbolz@gmail.com" sanitizers: