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