diff options
author | Victor van den Elzen <victor.vde@gmail.com> | 2009-11-11 07:39:21 +0100 |
---|---|---|
committer | Victor van den Elzen <victor.vde@gmail.com> | 2009-11-11 07:39:21 +0100 |
commit | b9856a266e1c7d4638a50ab09f49421a9258b4cd (patch) | |
tree | 40284f830cf4e5024243dd84718de502421475f2 /nasmlib.h | |
parent | cfe46ecfecea789aca731a0679394ee6b67ce52b (diff) | |
download | nasm-b9856a266e1c7d4638a50ab09f49421a9258b4cd.tar.gz |
Don't boundcheck 64-bit numbers, it gives problems due to overflows
Diffstat (limited to 'nasmlib.h')
-rw-r--r-- | nasmlib.h | 36 |
1 files changed, 27 insertions, 9 deletions
@@ -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; } |