pkgsrc-Users archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
pkgin segfaults at search sub command ( Re: COMMENT= (NULL)
my pkgin segfaults at search sub command
1. before doing nothing
-------------------------------------
mef20$ pkgin search llvm
[1] Segmentation fault (core dumped) pkgin search llvm
mef20$ gdb /usr/pkg/bin/pkgin
GNU gdb (GDB) 17.1
Copyright (C) 2025 Free Software Foundation, Inc.
...
...
(gdb) run search llvm
Starting program: /usr/pkg/bin/pkgin search llvm
[New process 14853]
Thread 1 "" received signal SIGSEGV, Segmentation fault.
0x00007e3ebecd4810 in strlen () from /usr/lib/libc.so.12
(gdb) bt
#0 0x00007e3ebecd4810 in strlen () from /usr/lib/libc.so.12
#1 0x00007e3ebeb67893 in regexec () from /usr/lib/libc.so.12
#2 0x000000000031da7d in ?? ()
#3 0x000000000032b198 in ?? ()
#4 0x0000000000315f29 in ?? ()
#5 0x00007f7ff79468a8 in ?? () from /usr/libexec/ld.elf_so
#6 0x0000000000000003 in ?? ()
#7 0x00007f7fffc86138 in ?? ()
#8 0x00007f7fffc8614b in ?? ()
#9 0x00007f7fffc86152 in ?? ()
#10 0x0000000000000000 in ?? ()
(gdb)
above shows no symbol, but make package locally and use that binary
2. using binary after make package
-------------------------------------
mef20@makoto 09:41:59/260531(..pkgtools/pkgin)% cd /export/WRKOBJDIR/pkgtools/pkgin/work/pkgin-26.4.0
mef20@makoto 09:42:06/260531(..work/pkgin-26.4.0)% gdb pkgin
GNU gdb (GDB) 17.1
Copyright (C) 2025 Free Software Foundation, Inc.
...
...
(gdb) run search llvm
Starting program: /export/WRKOBJDIR/pkgtools/pkgin/work/pkgin-26.4.0/pkgin search llvm
[New process 11230]
Thread 1 "" received signal SIGSEGV, Segmentation fault.
0x0000761e964a8810 in strlen () from /usr/lib/libc.so.12
(gdb) bt
#0 0x0000761e964a8810 in strlen () from /usr/lib/libc.so.12
#1 0x0000761e9633b893 in regexec () from /usr/lib/libc.so.12
#2 0x00000000003c88fd in search_pkg ()
#3 0x00000000003d6138 in main ()
(gdb)
3. by adding CFLAGS+= -g,
-------------------------------------
RCS file: /cvsroot/pkgsrc/pkgtools/pkgin/Makefile,v
retrieving revision 1.146
diff -u -r1.146 Makefile
--- Makefile 20 Apr 2026 18:09:24 -0000 1.146
+++ Makefile 31 May 2026 00:45:43 -0000
@@ -33,6 +33,7 @@
CONFIGURE_ARGS+= --with-sqlite3=${BUILDLINK_PREFIX.sqlite3}
USE_FEATURES= nbcompat
+CFLAGS+= -g
-------------
line nubmer will be shown
-------------
(gdb) bt
#0 0x0000780c796c3810 in strlen () from /usr/lib/libc.so.12
#1 0x0000780c79556893 in regexec () from /usr/lib/libc.so.12
#2 0x0000000000e0a8fd in search_pkg (pattern=0x7f7fff6ca9d8 "llvm") at pkglist.c:611
#3 0x0000000000e18138 in main (argc=2, argv=0x7f7fff6ca3e0) at main.c:289
4. The line of segfault
-------------------------------------
CF-SV8@makoto 09:53:29/260531(..git-work/pkgin)% cat -n pkglist.c | sed -n 607,612p
607 for (i = 0; i < REMOTE_PKG_HASH_SIZE; i++) {
608 SLIST_FOREACH(plist, &r_plisthead[i], next) {
609 if (regexec(&re, plist->name, 0, NULL, 0) == 0 ||
610 regexec(&re, plist->full, 0, NULL, 0) == 0 ||
-> 611 regexec(&re, plist->comment, 0, NULL, 0) == 0) {
612 matched = 1;
The vallue of 'plist->comment' is NULL at this case
and this value is given at local MACRO
-----
#define DUP_OR_NULL(x, y) x = (y) ? xstrdup(y) : NULL
-----
(See patch at item 7.)
5. condition
-------------------------------------
(After attached patch applied)
CF-SV8@makoto 09:46:39/260531(..git-work/pkgin)% pkgin list |grep null
emacs-compat-30.0.1.0 (null)
transient-0.8.1 (null)
with-editor-3.4.3 (null)
(At least two of above are my fault)
6. The condition for this case
-------------------------------------
- Using pkgin
- Binary packgages are creaeted locally
- Include wip in that binary packages
7. proposal to pkgin change
-------------------------------------
This change is suggested by Atsushi Toyokura.
Date: Fri May 29 20:05:20 2026 +0900
use xstrdup("") instead of NULL
diff --git a/pkglist.c b/pkglist.c
index e5e2ed2..07907d3 100644
--- a/pkglist.c
+++ b/pkglist.c
@@ -167,7 +167,7 @@ free_pkglist(Plisthead **plisthead)
*
* See LOCAL_PKGS_QUERY_ASC and REMOTE_PKGS_QUERY_ASC for the order of entries.
*/
-#define DUP_OR_NULL(x, y) x = (y) ? xstrdup(y) : NULL
+#define DUP_OR_NULL(x, y) x = (y) ? xstrdup(y) : xstrdup("")
#define NUM_OR_NULL(x, y) x = (y) ? strtol(y, (char **)NULL, 10) : 0
static int
record_pkglist(void *param, int argc, char **argv, char **colname)
8. More on pkglint
-------------------------------
Flag if the value for 'COMMENT= ' line is empty to ERROR
Thanks for reading..
--
Makoto Fujiwara
mef%NetBSD.org@localhost
makoto%if.t.u-tokyo.ac.jp@localhost
Home |
Main Index |
Thread Index |
Old Index