Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 5 Mar 1997 21:57:52 -0800 (PST)
From:      pius@iago.ienet.com
To:        freebsd-gnats-submit@freebsd.org
Subject:   bin/2893: pkg_delete segfaults when +CONTENTS doesn't set a prefix using @cwd
Message-ID:  <199703060557.VAA15455@freefall.freebsd.org>
Resent-Message-ID: <199703060600.WAA15612@freefall.freebsd.org>

index | next in thread | raw e-mail


>Number:         2893
>Category:       bin
>Synopsis:       pkg_delete segfaults when +CONTENTS doesn't set a prefix using @cwd
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Wed Mar  5 22:00:02 PST 1997
>Last-Modified:
>Originator:     Pius Fischer
>Organization:
>Release:        3.0-CURRENT
>Environment:
FreeBSD iago.ienet.com 3.0-CURRENT FreeBSD 3.0-CURRENT #0: Wed Mar  5
19:20:16 PST 1997     pius@iago.ienet.com:/usr/src/sys/compile/IAGO  i386

>Description:
Sorry to be so picky, this is a very small problem, but I encountered it
when I wanted to remove the MH package (I wanted to do a fresh install of
the MH port), but realized that for some reason there was no directory
/var/db/pkg/mh-6.8.4/. So I just created it, copied the PLIST from the port
to +CONTENTS, and typed "pkg_delete -v mh-6.8.4" which resulted in a coredump!

The problem: +CONTENTS didn't contain the "@cwd /usr/local" because that
gets added when you install the port or the package, but I had just copied
the PLIST straight from the port. So pkg_delete segfaults because in perform.c
it ends up doing a setenv(PKG_PREFIX_VNAME, NULL, 1) and setenv dereferences
the NULL pointer! The correct behavior should probably be either to set the
environment variable to "" or to print a warning message.
>How-To-Repeat:
Well, here's what I did:

mkdir /var/db/pkg/mh-6.8.4
cd /var/db/pkg/mh-6.8.4
cp /usr/ports/mail/mh/pkg/PLIST +CONTENTS
cd
pkg_delete -v mh-6.8.4

>Fix:
Well, perhaps one of these two patches should be applied:

(1)

--- perform.c.orig      Wed Mar  5 21:19:30 1997
+++ perform.c   Wed Mar  5 21:53:51 1997
@@ -94,7 +94,7 @@
     read_plist(&Plist, cfile);
     fclose(cfile);
     setenv(PKG_PREFIX_VNAME,
-          (p = find_plist(&Plist, PLIST_CWD)) ? p->name : NULL, 1);
+          (p = find_plist(&Plist, PLIST_CWD)) ? p->name : "", 1);
     if (fexists(REQUIRE_FNAME)) {
        if (Verbose)
            printf("Executing 'require' script.\n");

(2)

--- perform.c.orig      Wed Mar  5 21:19:30 1997
+++ perform.c   Wed Mar  5 21:54:46 1997
@@ -93,8 +93,12 @@
        add_plist(&Plist, PLIST_CWD, Prefix);
     read_plist(&Plist, cfile);
     fclose(cfile);
-    setenv(PKG_PREFIX_VNAME,
-          (p = find_plist(&Plist, PLIST_CWD)) ? p->name : NULL, 1);
+    p = find_plist(&Plist, PLIST_CWD);
+    if (!p) {
+       whinge("Package '%s' doesn't have a prefix.", pkg);
+       return 1;
+    }
+    setenv(PKG_PREFIX_VNAME, p->name, 1);
     if (fexists(REQUIRE_FNAME)) {
        if (Verbose)
            printf("Executing 'require' script.\n");

>Audit-Trail:
>Unformatted:


help

Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199703060557.VAA15455>