RPM Community Forums

Mailing List Message of <rpm-devel>

Re: rpm 5.1 segfaults

From: Jeff Johnson <n3npq@mac.com>
Date: Tue 15 Apr 2008 - 20:39:46 CEST
Message-Id: <70097AF0-B408-4248-BC73-18B439168587@mac.com>

On Apr 15, 2008, at 2:10 PM, Jeff Johnson wrote:

>
>> rpm: depends.c:1776: zapRelation: Assertion `tsi->tsi_reqx >= 0 &&
>> tsi->tsi_reqx < rpmdsCount(requires)' failed.
>> Avbrutt (SIGABRT)
>>
>
> Bingo. Thanks. Now to find where tsi->tsi_reqx goes awry ...
>

Hmmm, there's only one place that tsi->tsi_reqx is set.

And AFAICT, addRelation() is called only within an rpmds iteration,
where the value used should be valid. But the code paths are twistier
than I would like because the iteration index is accessed in the  
addRelation()
subroutine.

Can I get you to try reproducing with one more assertion?

Here is the patch:

@@ -1902,6 +1903,7 @@ static inline int addRelation(rpmts ts,

      tsi->tsi_tagn = rpmdsTagN(requires);
      tsi->tsi_reqx = rpmdsIx(requires);
+assert(tsi->tsi_reqx >= 0 && tsi->tsi_reqx < rpmdsCount(requires));

      tsi->tsi_next = rpmteTSI(q)->tsi_next;
      rpmteTSI(q)->tsi_next = tsi;

If the new assertion fires, then I'm not reading the rpmds iteration  
code correctly.

If the old assertion fires, then there's a wild pointer somewhere.

Thanks.

73 de Jeff
Received on Tue Apr 15 20:40:50 2008
Driven by Jeff Johnson and the RPM project team.
Hosted by OpenPKG and Ralf S. Engelschall.
Powered by FreeBSD and OpenPKG.