From owner-freebsd-bugs@FreeBSD.ORG Wed Aug 8 20:00:13 2007 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A7C8716A4C1 for ; Wed, 8 Aug 2007 20:00:13 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 66A2613C4A8 for ; Wed, 8 Aug 2007 20:00:13 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.14.1/8.14.1) with ESMTP id l78K0D2Z030442 for ; Wed, 8 Aug 2007 20:00:13 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.1/8.14.1/Submit) id l78K0DwU030441; Wed, 8 Aug 2007 20:00:13 GMT (envelope-from gnats) Resent-Date: Wed, 8 Aug 2007 20:00:13 GMT Resent-Message-Id: <200708082000.l78K0DwU030441@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Michael Zhilin Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id A34F116A481 for ; Wed, 8 Aug 2007 19:59:49 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21]) by mx1.freebsd.org (Postfix) with ESMTP id 8FF3713C4A3 for ; Wed, 8 Aug 2007 19:59:49 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (localhost [127.0.0.1]) by www.freebsd.org (8.14.1/8.14.1) with ESMTP id l78JxnIc083981 for ; Wed, 8 Aug 2007 19:59:49 GMT (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.14.1/8.14.1/Submit) id l78Jxnik083980; Wed, 8 Aug 2007 19:59:49 GMT (envelope-from nobody) Message-Id: <200708081959.l78Jxnik083980@www.freebsd.org> Date: Wed, 8 Aug 2007 19:59:49 GMT From: Michael Zhilin To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.0 Cc: Subject: bin/115327: [patch] "pkg_delete -a" causes segmentation fault for package with broken dependency X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Aug 2007 20:00:13 -0000 >Number: 115327 >Category: bin >Synopsis: [patch] "pkg_delete -a" causes segmentation fault for package with broken dependency >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Wed Aug 08 20:00:12 GMT 2007 >Closed-Date: >Last-Modified: >Originator: Michael Zhilin >Release: FreeBSD 7.0-CURRENT #1 >Organization: >Environment: FreeBSD reba 7.0-CURRENT FreeBSD 7.0-CURRENT #1: Wed Aug 1 06:13:10 MSD 2007 mizh@reba:/usr/obj/usr/src/sys/KRNL7 i386 >Description: After year usage of FreeBSD as desktop the package system has contained a lot of broken dependencies, lost libraries (lib files without appropriate package) and other garbage. And of course, after updating to 7.0-current, some applications don't have been runnable (some errors with libthr have occured). It was reason for cleaning of system. # pkg_deinstall -a .. a lot of packages was deleted ... # pkg_info .. 2 packages wasn't deleted ... pkg_deinstall was removed and a try to run "pkg_delete -a" causes following: # pkg_delete -a pkg_delete: Segmentation fault (core dumped) After compilation with debug options gdb's given me a reason: NULL pointer causes fault at /src/usr.sbin/pkg_install/delete/perform.c:line 266 >How-To-Repeat: I think it was broken dependency >Fix: The attached patch works for me. Patch attached with submission follows: --- perform.c 2004-06-29 23:06:41.000000000 +0400 +++ perform.c.new 2007-08-08 22:33:33.000000000 +0400 @@ -266,7 +266,7 @@ for (p = Plist.head; p ; p = p->next) { if (p->type != PLIST_PKGDEP) continue; - deporigin = (p->next->type == PLIST_DEPORIGIN) ? p->next->name : + deporigin = ( p->next != NULL && p->next->type == PLIST_DEPORIGIN) ? p->next->name : NULL; if (Verbose) { printf("Trying to remove dependency on package '%s'", p->name); >Release-Note: >Audit-Trail: >Unformatted: