RPM Community Forums

Mailing List Message of <rpm-devel>

Re: rpm 5.1 segfaults

From: Jeff Johnson <n3npq@mac.com>
Date: Mon 14 Apr 2008 - 22:50:35 CEST
Message-Id: <55205AAE-0310-423C-BA05-F56F78E70A05@mac.com>

On Apr 14, 2008, at 3:34 PM, Per Øyvind Karlsen wrote:

> På Mandag 14 april 2008 , 19:52:30 skrev Per Øyvind Karlsen:
>> På Mandag 14 april 2008 , 18:50:07 skrev Per Øyvind Karlsen:
>>> See attachment for more info, reproducer found at
>>> ftp://ftp.uninett.no/pub/linux/MandrivaLinux/devel/cooker/x86_64/ 
>>> media/ma
>>> in /release/ .
>>
>> updated running with --rpmdsdebug
>
> grf, here's the correct one
>

Thanks.

The segfault is occurring while attempting to display
the relations in 2 interlocked dependency loops while ordering.

Can you try reproducing with this patch?

Index: depends.c
===================================================================
RCS file: /v/rpm/cvs/rpm/lib/depends.c,v
retrieving revision 1.394
diff -u -b -B -w -p -r1.394 depends.c
--- depends.c   1 Apr 2008 09:08:49 -0000       1.394
+++ depends.c   14 Apr 2008 20:47:03 -0000
@@ -1764,11 +1764,12 @@ zapRelation(rpmte q, rpmte p,
         requires = rpmteDS(p, tsi->tsi_tagn);
         if (requires == NULL) continue;         /* XXX can't happen */

-       (void) rpmdsSetIx(requires, tsi->tsi_reqx);
-
+       {   int ix = rpmdsSetIx(requires, tsi->tsi_reqx);
+assert(tsi->tsi_reqx >= 0 && tsi->tsi_reqx < rpmdsCount(requires));
         Flags = rpmdsFlags(requires);
-
         dp = rpmdsNewDNEVR( identifyDepend(Flags), requires);
+           (void) rpmdsSetIx(requires, ix);
+       }

         /*
          * Attempt to unravel a dependency loop by eliminating  
Requires's.

The patch saves the current dependency index "just in case" and
adds a range check assertion on the dependency set index (which seems
to be the likeliest failure from looking at the backtrace).

73 de Jeff
Received on Mon Apr 14 22:51:24 2008
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.