pkgsrc-Changes archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
CVS commit: pkgsrc/graphics/geeqie
Module Name: pkgsrc
Committed By: gdt
Date: Tue Nov 22 14:13:23 UTC 2022
Modified Files:
pkgsrc/graphics/geeqie: distinfo
Added Files:
pkgsrc/graphics/geeqie/patches: patch-src_main.c
Removed Files:
pkgsrc/graphics/geeqie/patches: patch-ac
Log Message:
graphics/geeqie: Redo patch-ac (UB avoidance)
Redo patch-ac, which was about avoiding UB from calls that were not
async-signal-safe from a signal handler. Further, the code called
mmap in a way that POSIX says must fail.
Add links to upstream bug report and upstream pull request.
To generate a diff of this commit:
cvs rdiff -u -r1.29 -r1.30 pkgsrc/graphics/geeqie/distinfo
cvs rdiff -u -r1.8 -r0 pkgsrc/graphics/geeqie/patches/patch-ac
cvs rdiff -u -r0 -r1.1 pkgsrc/graphics/geeqie/patches/patch-src_main.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: pkgsrc/graphics/geeqie/distinfo
diff -u pkgsrc/graphics/geeqie/distinfo:1.29 pkgsrc/graphics/geeqie/distinfo:1.30
--- pkgsrc/graphics/geeqie/distinfo:1.29 Mon Nov 21 23:55:22 2022
+++ pkgsrc/graphics/geeqie/distinfo Tue Nov 22 14:13:23 2022
@@ -1,10 +1,10 @@
-$NetBSD: distinfo,v 1.29 2022/11/21 23:55:22 gdt Exp $
+$NetBSD: distinfo,v 1.30 2022/11/22 14:13:23 gdt Exp $
BLAKE2s (geeqie-2.0.1.tar.xz) = 344660eddf23258c87afb4855c616ba24a6eb0562756c15c554bed30e241ae78
SHA512 (geeqie-2.0.1.tar.xz) = cd2251c831c6d4d461d92eee84df08590752ad625e1f50d57e1fb5d0fc6ac16a225584a8217e14bf4f993ba247f7df3296498b27fcc4f5f4c7f25307699aadc5
Size (geeqie-2.0.1.tar.xz) = 1666600 bytes
-SHA1 (patch-ac) = 6cebab3e14ce51c59e70fc902a514d1bbafc3b33
SHA1 (patch-config.h.in) = 301b461a7c3ce8b699f4651363ddf18017eca0df
SHA1 (patch-doc_meson.build) = bfa986b7181355c8f02ffec1af39476a0bc6b491
SHA1 (patch-meson.build) = c6a0ac55b03d3c78619c55f82feebe66ea0a1e6b
SHA1 (patch-meson__options.txt) = e25acfd12c46337e1a992e5629cf82b5fa8f838d
+SHA1 (patch-src_main.c) = 24531eeaf999e26cf0cfd3983a0fbb0eaaaf569f
Added files:
Index: pkgsrc/graphics/geeqie/patches/patch-src_main.c
diff -u /dev/null pkgsrc/graphics/geeqie/patches/patch-src_main.c:1.1
--- /dev/null Tue Nov 22 14:13:23 2022
+++ pkgsrc/graphics/geeqie/patches/patch-src_main.c Tue Nov 22 14:13:23 2022
@@ -0,0 +1,62 @@
+$NetBSD: patch-src_main.c,v 1.1 2022/11/22 14:13:23 gdt Exp $
+
+Avoid UB in a signal handler, and avoid making an mmap call that POSIX says must fail.
+
+Filed upstream:
+ https://github.com/BestImageViewer/geeqie/issues/1052
+ https://github.com/BestImageViewer/geeqie/pull/1053
+
+--- src/main.c.orig 2022-08-12 09:32:26.000000000 +0000
++++ src/main.c
+@@ -1016,22 +1016,31 @@ void exit_program(void)
+ exit_program_final();
+ }
+
+-/* This code is supposed to handle situation when a file mmaped by image_loader
++/* This code attempts to handle situation when a file mmaped by image_loader
+ * or by exif loader is truncated by some other process.
+- * This is probably not completely correct according to posix, because
+- * mmap is not in the list of calls that can be used safely in signal handler,
+- * but anyway, the handler is called in situation when the application would
+- * crash otherwise.
+- * Ideas for improvement are welcome ;)
++ * This code is incorrect according to POSIX, because:
++ *
++ * mmap is not async-signal-safe and thus may not be called from a signal handler
++ *
++ * mmap must be called with a valid file descriptor. POSIX requires that
++ * a fildes argument of -1 must cause mmap to return EBADF.
++ *
++ * See https://github.com/BestImageViewer/geeqie/issues/1052 for discussion of
++ * an alternative approach.
+ */
+ /** @FIXME this probably needs some better ifdefs. Please report any compilation problems */
+
+ #if defined(SIGBUS) && defined(SA_SIGINFO)
+ static void sigbus_handler_cb(int UNUSED(signum), siginfo_t *info, void *UNUSED(context))
+ {
+- unsigned long pagesize = sysconf(_SC_PAGE_SIZE);
+- DEBUG_1("SIGBUS %p", info->si_addr);
+- mmap((void *)(((unsigned long)info->si_addr / pagesize) * pagesize), pagesize, PROT_READ | PROT_WRITE, MAP_FIXED | MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
++ /*
++ * @FIXME Design and implement a POSIX-acceptable approach,
++ * after first documenting the sitations where SIGBUS occurs.
++ * See https://github.com/BestImageViewer/geeqie/issues/1052 for discussion
++ */
++
++ DEBUG_1("SIGBUS %p NOT HANDLED", info->si_addr);
++ exit(-1);
+ }
+ #endif
+
+@@ -1204,7 +1213,10 @@ gint main(gint argc, gchar *argv[])
+ /* setup random seed for random slideshow */
+ srand(time(NULL));
+
++#if 0
++ /* See later comment; this handler leads to UB. */
+ setup_sigbus_handler();
++#endif
+
+ /* register global notify functions */
+ file_data_register_notify_func(cache_notify_cb, NULL, NOTIFY_PRIORITY_HIGH);
Home |
Main Index |
Thread Index |
Old Index