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
______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
Developer Communication List                        rpm-devel@rpm5.org

Reply via email to