Ilya Zakharevich on Tue, 19 Sep 2000 17:07:47 -0400 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: Math::Pari segfaults? |
On Mon, Sep 18, 2000 at 01:00:58PM +0530, Vipul Ved Prakash wrote: > After a few wild goose chases, I discovered the bug. makerandom_itv() (in > Crypt::Random) was doing $c = Mod(0, $b-$a); -- this statement was > triggering the segfault. I changed it $d = $b-$a; $c = Mod(0, $d); and now > it seems to work fine. ($a,$b,$c,$d are Math::Pari objects.) > > While this seems to have something to do with PARI's non-existent > refcounting mechanism, I don't understand exactly why $c = Mod(0, $b-$a) was > breaking. I would appreciate if you could explain. Hint (this is not a full explanation: the actual bug is due to interaction of several different design choices, this shows only one of the parts): Initially $b-$a was a temporary, which was promptly deleted after the statement $c = Mod(0, $b-$a); was executed. After it was deleted, one of the pointers in the internal representation of $c became invalid (due to absense of refcounting in PARI). The change you did put the modulus into a long-time storage, so it continued to be valid during the lifetime of $c. [In fact I do not know *in details* how $c = Mod(0, $b-$a); could lead to a failure. I would think that in this particular example PARI could understand that $b-$a is a temporary (I would think it should live on the PARI stack...). I need to think more about this.] Ilya