Project

General

Profile

Bug #7371 ยป 0001-bigdecimal.c-avoid-undefined-overflow-checking.patch

xi (Xi Wang), 11/16/2012 05:24 PM

View differences:

ext/bigdecimal/bigdecimal.c
SIGNED_VALUE e = a->exponent;
SIGNED_VALUE m = e+n;
SIGNED_VALUE eb, mb;
/* Use unsigned VALUE to avoid undefined behavior */
if(e>0) {
if(n>0) {
mb = m*(SIGNED_VALUE)BASE_FIG;
eb = e*(SIGNED_VALUE)BASE_FIG;
mb = m*(VALUE)BASE_FIG;
eb = e*(VALUE)BASE_FIG;
if(mb<eb) goto overflow;
}
} else if(n<0) {
mb = m*(SIGNED_VALUE)BASE_FIG;
eb = e*(SIGNED_VALUE)BASE_FIG;
mb = m*(VALUE)BASE_FIG;
eb = e*(VALUE)BASE_FIG;
if(mb>eb) goto underflow;
}
a->exponent = m;
    (1-1/1)