From b9856a266e1c7d4638a50ab09f49421a9258b4cd Mon Sep 17 00:00:00 2001 From: Victor van den Elzen Date: Wed, 11 Nov 2009 07:39:21 +0100 Subject: [PATCH] Don't boundcheck 64-bit numbers, it gives problems due to overflows --- nasmlib.h | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/nasmlib.h b/nasmlib.h index fb2e6e3d..372095c7 100644 --- a/nasmlib.h +++ b/nasmlib.h @@ -395,27 +395,45 @@ size_t fwritezero(size_t bytes, FILE *fp); static inline bool overflow_general(int64_t value, int bytes) { - int sbit = (bytes << 3) - 1; - int64_t vmax = ((int64_t)2 << sbit) - 1; - int64_t vmin = -((int64_t)1 << sbit); + int sbit; + int64_t vmax, vmin; + + if (bytes >= 8) + return false; + + sbit = (bytes << 3) - 1; + vmax = ((int64_t)2 << sbit) - 1; + vmin = -((int64_t)1 << sbit); return value < vmin || value > vmax; } static inline bool overflow_signed(int64_t value, int bytes) { - int sbit = (bytes << 3) - 1; - int64_t vmax = ((int64_t)1 << sbit) - 1; - int64_t vmin = -((int64_t)1 << sbit); + int sbit; + int64_t vmax, vmin; + + if (bytes >= 8) + return false; + + sbit = (bytes << 3) - 1; + vmax = ((int64_t)1 << sbit) - 1; + vmin = -((int64_t)1 << sbit); return value < vmin || value > vmax; } static inline bool overflow_unsigned(int64_t value, int bytes) { - int sbit = (bytes << 3) - 1; - int64_t vmax = ((int64_t)2 << sbit) - 1; - int64_t vmin = 0; + int sbit; + int64_t vmax, vmin; + + if (bytes >= 8) + return false; + + sbit = (bytes << 3) - 1; + vmax = ((int64_t)2 << sbit) - 1; + vmin = 0; return value < vmin || value > vmax; }