Re: zbar-0.23.93p1 segfaults, on -current 2026q3

Stuart Henderson <[email protected]>
Newsgroups gmane.os.openbsd.ports
Message-ID <[email protected]>
On 2026/08/17 18:56, Mikolaj Kucharski wrote:
> Hi all.
> 
> I see consisent segmentation fault with `zbarimg -q --raw sample.png`
> command. I don't have usable core at present, so don't have any more
> info, but I am asking do you see the same? I took few random QR codes
> from the Internet and they all dump the core with above command.
> 
> I was using over the years zbarimg many times, so I didn't see this
> before. I see this on two separate machines.

I see it here too, also with other image formats, and with zbar compiled
with any of base llvm 22, ports llvm 21, ports gcc 16, on amd64 and
aarch64. Also same if I use packages from just before the ImageMagick
update.

Found a slightly older laptop and updated to 2026-05-15-0105
packages from ftp.hostserver.de archive, and zbar from there works.

Stepping forward the zbar package from 2026-05-30-0105 works,
updating just zbar to the package from 2026-06-01-0105 without
touching any other package it starts segfaulting.

The big thing that is likely to be in this window is LLVM 22.

Here's a backtrace from one of the times it crashed.

$ egdb zbarimg 
GNU gdb (GDB) 17.2
Copyright (C) 2025 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
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-unknown-openbsd8.0".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from zbarimg...
Reading symbols from /usr/local/bin/.debug/zbarimg.dbg...
(gdb) set args --verbose=999 somefile.png
(gdb) r
Starting program: /usr/local/bin/zbarimg --verbose=999 somefile.png
_zbar_process_image: processing: Y800(30303859) 324x234 @0x2e14426f000
_zbar_scan_image: img_x+: 0000,0000 @0x2e14426f000
_zbar_scan_image: img_x-: 0323,0001 @0x2e14426f287

Program received signal SIGSEGV, Segmentation fault.
_zbar_scan_image (iscn=0x2e17de0dd80, img=0x2e0d0cfa310) at img_scanner.c:964
964			uint8_t d = *p;
(gdb) bt
#0  _zbar_scan_image (iscn=0x2e17de0dd80, img=0x2e0d0cfa310) at img_scanner.c:964
#1  0x000002e136700ae9 in zbar_scan_image (iscn=0x2e0d0d06880, img=0x0) at img_scanner.c:1128
#2  0x000002e1366fa5f1 in _zbar_process_image (proc=0x2e0d0d2b480, img=0x2e0d0cfa540) at processor.c:84
#3  0x000002e1366fc50c in zbar_process_image (proc=0x2e0d0d2b480, img=0x2e0d0cfa540) at processor.c:707
#4  0x000002de9426d5a6 in scan_image (filename=0x7743e50f5b7d "somefile.png") at zbarimg/zbarimg.c:209
#5  0x000002de9426ccf8 in main (argc=3, argv=0x7743e50f5908) at zbarimg/zbarimg.c:448
(gdb) frame 2
#2  0x000002e1366fa5f1 in _zbar_process_image (proc=0x2e0d0d2b480, img=0x2e0d0cfa540) at processor.c:84
84		nsyms = zbar_scan_image(proc->scanner, tmp);
(gdb) list
79		if (proc->syms) {
80		    zbar_symbol_set_ref(proc->syms, -1);
81		    proc->syms = NULL;
82		}
83		zbar_image_scanner_recycle_image(proc->scanner, img);
84		nsyms = zbar_scan_image(proc->scanner, tmp);
85		_zbar_image_swap_symbols(img, tmp);
86	
87		zbar_image_destroy(tmp);
88		tmp = NULL;
(gdb) p tmp
$1 = (zbar_image_t *) 0x2e0d0cfa310
(gdb) p *tmp
$2 = {
  format = 808466521,
  width = 324,
  height = 234,
  data = 0x2e14426f000,
  datalen = 75816,
  crop_x = 0,
  crop_y = 0,
  crop_w = 324,
  crop_h = 234,
  userdata = 0x0,
  cleanup = 0x2e1366f8780 <cleanup_ref>,
  refcnt = 1,
  src = 0x0,
  srcidx = -1,
  next = 0x2e0d0cfa540,
  seq = 0,
  syms = 0x2e0d0d2ffc0
}
(gdb) frame 3
#3  0x000002e1366fc50c in zbar_process_image (proc=0x2e0d0d2b480, img=0x2e0d0cfa540) at processor.c:707
707		rc = _zbar_process_image(proc, img);
(gdb) p img
$3 = (zbar_image_t *) 0x2e0d0cfa540
(gdb) list
702		rc = _zbar_processor_set_size(proc, zbar_image_get_width(img),
703					      zbar_image_get_height(img));
704	    if (!rc) {
705		zbar_image_scanner_enable_cache(proc->scanner, 0);
706		zbar_image_scanner_request_dbus(proc->scanner, proc->is_dbus_enabled);
707		rc = _zbar_process_image(proc, img);
708		if (proc->streaming)
709		    zbar_image_scanner_enable_cache(proc->scanner, 1);
710	    }
711	

On another machine which is closer to -current, recompiling zbar with
-O1 I still get SEGV, but with -O0 it works ok.

Belatedly thought to check issues/PRs and found
https://github.com/mchehab/zbar/pull/329 which would explain it,
and tests concur.

ok?

Index: Makefile
===================================================================
RCS file: /cvs/ports/graphics/zbar/Makefile,v
diff -u -p -r1.40 Makefile
--- Makefile	17 Aug 2026 19:36:49 -0000	1.40
+++ Makefile	17 Aug 2026 20:36:57 -0000
@@ -1,7 +1,7 @@
 COMMENT=	ZBar barcode reader

 DISTNAME=	zbar-0.23.93
-REVISION=	2
+REVISION=	3

 SHARED_LIBS=	zbar	0.1 \
 		zbargtk	0.1
Index: patches/patch-zbar_img_scanner_c
===================================================================
RCS file: patches/patch-zbar_img_scanner_c
diff -N patches/patch-zbar_img_scanner_c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-zbar_img_scanner_c	17 Aug 2026 20:36:57 -0000
@@ -0,0 +1,22 @@
+https://github.com/mchehab/zbar/pull/329, plus pull in stddef.h
+
+Index: zbar/img_scanner.c
+--- zbar/img_scanner.c.orig
++++ zbar/img_scanner.c
+@@ -33,6 +33,7 @@
+ #endif
+
+ #include <assert.h>
++#include <stddef.h> /* ptrdiff_t */
+ #include <stdlib.h> /* malloc, free */
+ #include <string.h> /* memcmp, memset, memcpy */
+
+@@ -862,7 +863,7 @@ static void zbar_send_code_via_dbus(zbar_image_scanner
+     do {                                 \
+ 	x += (dx);                       \
+ 	y += (dy);                       \
+-	p += (dx) + ((uintptr_t)(dy)*w); \
++	p += (ptrdiff_t)(dx) + (intptr_t)(dy) * (intptr_t)w; \
+     } while (0);
+
+ static void *_zbar_scan_image(zbar_image_scanner_t *iscn, zbar_image_t *img)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.