diff --git a/ubuntu-22.04-jammy-amd64-valgrind/Dockerfile-dbg b/ubuntu-22.04-jammy-amd64-valgrind/Dockerfile-dbg new file mode 100644 index 00000000..fecdc586 --- /dev/null +++ b/ubuntu-22.04-jammy-amd64-valgrind/Dockerfile-dbg @@ -0,0 +1,26 @@ +FROM ubuntu-22.04-jammy-amd64-valgrind + +USER root +RUN apt-get -qq update && apt-get install -y ubuntu-dbgsym-keyring + +RUN echo "deb http://ddebs.ubuntu.com jammy main restricted universe multiverse" > /etc/apt/sources.list.d/ddebs.list +RUN echo "deb http://ddebs.ubuntu.com jammy-updates main restricted universe multiverse" >> /etc/apt/sources.list.d/ddebs.list +RUN perl -pi -e 's/# deb-src/deb-src/;' /etc/apt/sources.list + +RUN apt-get -qq update && DEBIAN_FRONTEND=noninteractive apt-get -y install \ + libfreetype6-dbgsym \ + libtiff5-dbgsym \ + libwebpmux3-dbgsym \ + libwebp7-dbgsym \ + libwebpdemux2-dbgsym \ + libwebpmux3-dbgsym \ + libopenjp2-7-dbgsym \ + libharfbuzz0b-dbgsym \ + libfribidi0-dbgsym \ + emacs-nox + +RUN cd /usr/src && apt-get source freetype tiff libwebp libopenjp2-7 harfbuzz fribidi + +COPY setup.sh /depends/setup.sh +USER pillow +CMD ["/depends/setup.sh"] diff --git a/ubuntu-22.04-jammy-amd64-valgrind/Makefile b/ubuntu-22.04-jammy-amd64-valgrind/Makefile deleted file mode 120000 index 5e7b0e26..00000000 --- a/ubuntu-22.04-jammy-amd64-valgrind/Makefile +++ /dev/null @@ -1 +0,0 @@ -../Makefile.sub \ No newline at end of file diff --git a/ubuntu-22.04-jammy-amd64-valgrind/Makefile b/ubuntu-22.04-jammy-amd64-valgrind/Makefile new file mode 100644 index 00000000..a1f1a9a7 --- /dev/null +++ b/ubuntu-22.04-jammy-amd64-valgrind/Makefile @@ -0,0 +1,40 @@ +WD = $(shell pwd) +USERNAME := $(shell docker info | grep Username | xargs | cut -d ' ' -f 2) +TARGET := $(notdir $(WD)) +ROOT := $(abspath $(WD)/../Pillow) +IMAGENAME := $(if $(USERNAME), $(USERNAME)/$(TARGET), $(TARGET)) +BRANCH := $(shell git rev-parse --abbrev-ref HEAD) + +.PHONY: build +build: + cp -r ../Pillow/depends . + cp test.sh depends + docker build -t $(IMAGENAME):$(BRANCH) . + +.PHONY: update +update: + ./update.sh + +.PHONY: test +test: + docker run --rm -v $(ROOT):/Pillow $(IMAGENAME):$(BRANCH) + +.PHONY: push +push: + docker push $(IMAGENAME):$(BRANCH) + +.PHONY: clean +clean: + rm -r depends + +.PHONY: shell +shell: + docker run --rm -it -v $(ROOT):/Pillow $(IMAGENAME):$(BRANCH) /bin/bash + +build-dbg: + docker build -t $(IMAGENAME)-dbg:$(BRANCH) -f Dockerfile-dbg . + +dbg: + docker run --privileged --rm -it -v $(ROOT):/Pillow $(IMAGENAME)-dbg:$(BRANCH) + + diff --git a/ubuntu-22.04-jammy-amd64-valgrind/README-dbg.md b/ubuntu-22.04-jammy-amd64-valgrind/README-dbg.md new file mode 100644 index 00000000..f983c705 --- /dev/null +++ b/ubuntu-22.04-jammy-amd64-valgrind/README-dbg.md @@ -0,0 +1,52 @@ +# Debug image + +Sometimes we'll get an error that's most easily reproduced in the +valgrind docker image. [citation needed] + +The `build-dbg` and `dbg` shell provide some symbols and debugging +tools to fix that. Emacs is provided, as are some of the source packages. + +You may need to set source directories with the `set substitute-path` +command. + +e.g.: + +``` +pillow@2f7a4ea5c959:/Pillow/oss-fuzz-tests$ gdb python +GNU gdb (Ubuntu 12.1-0ubuntu1~22.04) 12.1 +Copyright (C) 2022 Free Software Foundation, Inc. +License GPLv3+: GNU GPL version 3 or later +This is free software: you are free to change and redistribute it. +There is NO WARRANTY, to the extent permitted by law. +Type "show copying" and "show warranty" for details. +This GDB was configured as "x86_64-linux-gnu". +Type "show configuration" for configuration details. +For bug reporting instructions, please see: +. +Find the GDB manual and other documentation resources online at: + . + +For help, type "help". +Type "apropos word" to search for commands related to "word"... +Reading symbols from python... +(gdb) b _imagingft.c:922 +No source file named _imagingft.c. +Make breakpoint pending on future shared library load? (y or [n]) y +Breakpoint 1 (_imagingft.c:922) pending. +(gdb) r f.py DejaVuSans-24-8-stripped.ttf +Starting program: /vpy3/bin/python f.py DejaVuSans-24-8-stripped.ttf +[Thread debugging using libthread_db enabled] +Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". + +Breakpoint 1, font_render (self=0x7ffff70e9780, args=) at src/_imagingft.c:922 +922 if (!bitmap.buffer) { +... +0x00007ffff6fe4d6a in FT_Bitmap_Convert (library=, source=source@entry=0x7fffffffdff0, target=target@entry=0x7fffffffe020, alignment=alignment@entry=1) at ./src/base/ftbitmap.c:633 +633 ./src/base/ftbitmap.c: No such file or directory. +(gdb) set substitute-path ./src /usr/src/freetype-2.11.1+dfsg/src/ +(gdb) f +#0 0x00007ffff6fe4d6a in FT_Bitmap_Convert (library=, source=source@entry=0x7fffffffdff0, target=target@entry=0x7fffffffe020, + alignment=alignment@entry=1) at ./src/base/ftbitmap.c:633 +633 FT_Int val = *ss; + +``` diff --git a/ubuntu-22.04-jammy-amd64-valgrind/setup.sh b/ubuntu-22.04-jammy-amd64-valgrind/setup.sh new file mode 100755 index 00000000..83cbaa8f --- /dev/null +++ b/ubuntu-22.04-jammy-amd64-valgrind/setup.sh @@ -0,0 +1,7 @@ +#!/bin/bash +source /vpy3/bin/activate +cd /Pillow +make clean +make install + +bash