Opened 11 years ago

Last modified 8 years ago

#9880 closed defect

Segfault in PyNaC 0.2.0.p4 — at Version 2

Reported by: jpflori Owned by: burcin
Priority: major Milestone: sage-5.11
Component: symbolics Keywords: pynac spkg
Cc: kcrisman, zimmerma Merged in:
Authors: Reviewers:
Report Upstream: N/A Work issues:
Branch: Commit:
Dependencies: Stopgaps:

Status badges

Description (last modified by jpflori)

Here is a short example found by Burcin and reproducing the bug:

b = [var('b_%s'%i) for i in range(4)]

precomp = (2^b_2 + 2)*(2^b_1 + 2^(-b_1) + 2^b_1*2^b_0 - 2^b_1*2^(-b_0)
- 2^(-b_1)*2^b_0 - 2^(-b_1)*2^(-b_0) + 2^b_0 + 2^(-b_0) - 9) + (2^b_1 +
2^(-b_1) + 2^b_1*2^b_0 - 2^b_1*2^(-b_0) - 2^(-b_1)*2^b_0 -
2^(-b_1)*2^(-b_0) + 2^b_0 + 2^(-b_0) - 9)/2^b_2

repl_dict = {b_0: b_0, b_3: b_1, b_2: b_3, b_1: b_2}
P = precomp.substitute(repl_dict)
P.expand() 

This is already being discussed here: http://groups.google.com/group/sage-support/browse_thread/thread/7c85f02c76012722

Change History (4)

comment:1 Changed 11 years ago by burcin

  • Description modified (diff)
  • Milestone set to sage-4.6

comment:2 in reply to: ↑ description Changed 11 years ago by jpflori

  • Description modified (diff)

The bug happened because of the comparison functions which are used in a call to std::sort.

I have finally looked at the comparison functions and exchanging :

cmpval = seq[0].coeff.compare(other.exponent);

by

cmpval = -seq[0].coeff.compare(other.exponent);

in mul::compare_pow (mul.cpp:1265) seems to prevent the above bug from happening.

It seems to fit better with the change made by William Stein in power::compare_same_type (power.cpp:951).

However it doesn't mean the problem is completely solved...

I'll try to take a deeper look at the comparison functions at some point.

I tested the above fix with pynac 0.2.1.

Changed 11 years ago by jpflori

Burcin original patch

Changed 11 years ago by jpflori

Patch to apply on top of the other one

Note: See TracTickets for help on using tickets.