Bug #7744 ยป 242.patch
| time.c | ||
|---|---|---|
| static void | ||
| time_overflow_p(time_t *secp, long *nsecp) | ||
| { | ||
|     time_t tmp, sec = *secp; | ||
|     time_t sec = *secp; | ||
|     long nsec = *nsecp; | ||
|     if (nsec >= 1000000000) {	/* nsec positive overflow */ | ||
| 	tmp = sec + nsec / 1000000000; | ||
| 	nsec %= 1000000000; | ||
| 	if (sec > 0 && tmp < 0) { | ||
| 	if (sec > TIMET_MAX - nsec / 1000000000) { | ||
| 	    rb_raise(rb_eRangeError, "out of Time range"); | ||
| 	} | ||
| 	sec = tmp; | ||
| 	sec += nsec / 1000000000; | ||
| 	nsec %= 1000000000; | ||
|     } | ||
|     if (nsec < 0) {		/* nsec negative overflow */ | ||
| 	tmp = sec + NDIV(nsec,1000000000); /* negative div */ | ||
| 	nsec = NMOD(nsec,1000000000);      /* negative mod */ | ||
| 	if (sec < 0 && tmp > 0) { | ||
| 	if (sec < TIMET_MIN - NDIV(nsec,1000000000)) { | ||
| 	    rb_raise(rb_eRangeError, "out of Time range"); | ||
| 	} | ||
| 	sec = tmp; | ||
| 	sec += NDIV(nsec,1000000000); /* negative div */ | ||
| 	nsec = NMOD(nsec,1000000000); /* negative mod */ | ||
|     } | ||
| #ifndef NEGATIVE_TIME_T | ||
|     if (sec < 0) | ||
| -  | ||
| ext/openssl/ossl.c | ||
|---|---|---|
| string2hex(const unsigned char *buf, int buf_len, char **hexbuf, int *hexbuf_len) | ||
| { | ||
|     static const char hex[]="0123456789abcdef"; | ||
|     int i, len = 2 * buf_len; | ||
|     int i, len; | ||
|     if (buf_len < 0 || len < buf_len) { /* PARANOIA? */ | ||
|     if (buf_len < 0 || buf_len > INT_MAX / 2) { /* PARANOIA? */ | ||
| 	return -1; | ||
|     } | ||
|     len = 2 * buf_len; | ||
|     if (!hexbuf) { /* if no buf, return calculated len */ | ||
| 	if (hexbuf_len) { | ||
| 	    *hexbuf_len = len; | ||
| -  | ||
| ext/bigdecimal/bigdecimal.c | ||
|---|---|---|
|     return VpConstOne; | ||
| } | ||
| #define SIGNED_VALUE_MAX (SIGNED_VALUE)((~(VALUE)0) >> 1) | ||
| #define SIGNED_VALUE_MIN (SIGNED_VALUE)(~((~(VALUE)0) >> 1)) | ||
| /* If exponent overflows,then raise exception or returns 0 */ | ||
| static int | ||
| AddExponent(Real *a, SIGNED_VALUE n) | ||
| { | ||
|     SIGNED_VALUE e = a->exponent; | ||
|     SIGNED_VALUE m = e+n; | ||
|     SIGNED_VALUE eb, mb; | ||
|     if(e>0) { | ||
|         if(n>0) { | ||
|             mb = m*(SIGNED_VALUE)BASE_FIG; | ||
|             eb = e*(SIGNED_VALUE)BASE_FIG; | ||
|             if(mb<eb) goto overflow; | ||
|         } | ||
|     } else if(n<0) { | ||
|         mb = m*(SIGNED_VALUE)BASE_FIG; | ||
|         eb = e*(SIGNED_VALUE)BASE_FIG; | ||
|         if(mb>eb) goto underflow; | ||
|     if (n > 0) { | ||
|         if (e > SIGNED_VALUE_MAX / BASE_FIG - n) | ||
|             goto overflow; | ||
|     } else { | ||
|         if (e < SIGNED_VALUE_MIN / BASE_FIG - n) | ||
|             goto underflow; | ||
|     } | ||
|     a->exponent = m; | ||
|     a->exponent = e + n; | ||
|     return 1; | ||
| /* Overflow/Underflow ==> Raise exception or returns 0 */ | ||