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