From 43fb69dec24a2828f8bbf320c7cfac408be00486 Mon Sep 17 00:00:00 2001 From: termux-pacman-bot Date: Sun, 8 Sep 2024 13:37:02 +0000 Subject: [PATCH] fix(main/jpegoptim): Disable fdsan to fix running with multiple threads This fixes the following runtime error. jpegoptim -w6 image.jpg image.jpg 512x512 24bit N JFIF [OK] 62476 --> 62476 bytes (0.00%), skipped. fdsan: attempted to close file descriptor 3, expected to be unowned, actually owned by FILE* 0x7d48447888 Aborted --- packages/jpegoptim/build.sh | 1 + packages/jpegoptim/disable-fdsan.patch | 29 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 packages/jpegoptim/disable-fdsan.patch diff --git a/packages/jpegoptim/build.sh b/packages/jpegoptim/build.sh index e56ffabd8c..7e6b314ae7 100644 --- a/packages/jpegoptim/build.sh +++ b/packages/jpegoptim/build.sh @@ -3,6 +3,7 @@ TERMUX_PKG_DESCRIPTION="JPEG optimizer that recompresses image files to a smalle TERMUX_PKG_LICENSE="GPL-3.0" TERMUX_PKG_MAINTAINER="@termux" TERMUX_PKG_VERSION="1.5.5" +TERMUX_PKG_REVISION=1 TERMUX_PKG_SRCURL=https://github.com/tjko/jpegoptim/archive/refs/tags/v${TERMUX_PKG_VERSION}.tar.gz TERMUX_PKG_SHA256=90a309d1c092de358bb411d702281ac3039b489d03adb0bc3c4ef04cf0067d38 TERMUX_PKG_AUTO_UPDATE=true diff --git a/packages/jpegoptim/disable-fdsan.patch b/packages/jpegoptim/disable-fdsan.patch new file mode 100644 index 0000000000..d35c74af32 --- /dev/null +++ b/packages/jpegoptim/disable-fdsan.patch @@ -0,0 +1,29 @@ +--- a/jpegoptim.c ++++ b/jpegoptim.c +@@ -1216,10 +1216,26 @@ + } + #endif + ++#include ++#include ++ ++static inline void termux_disable_fdsan() { ++ // For Android 11+. ++ void *lib_handle = dlopen("libc.so", RTLD_LAZY); ++ if (lib_handle) { ++ void (*set_fdsan_error_level)(enum android_fdsan_error_level newlevel) = dlsym(lib_handle, "android_fdsan_set_error_level"); ++ if (set_fdsan_error_level) { ++ set_fdsan_error_level(ANDROID_FDSAN_ERROR_LEVEL_DISABLED); ++ } ++ dlclose(lib_handle); ++ } ++} + + /****************************************************************************/ + int main(int argc, char **argv) + { ++ termux_disable_fdsan(); ++ + struct stat file_stat; + char tmpfilename[MAXPATHLEN + 1],tmpdir[MAXPATHLEN + 1]; + char newname[MAXPATHLEN + 1], dest_path[MAXPATHLEN + 1];