summaryrefslogtreecommitdiff
path: root/nasmlib.h
diff options
context:
space:
mode:
authorVictor van den Elzen <victor.vde@gmail.com>2009-11-11 07:39:21 +0100
committerVictor van den Elzen <victor.vde@gmail.com>2009-11-11 07:39:21 +0100
commitb9856a266e1c7d4638a50ab09f49421a9258b4cd (patch)
tree40284f830cf4e5024243dd84718de502421475f2 /nasmlib.h
parentcfe46ecfecea789aca731a0679394ee6b67ce52b (diff)
downloadnasm-b9856a266e1c7d4638a50ab09f49421a9258b4cd.tar.gz
Don't boundcheck 64-bit numbers, it gives problems due to overflows
Diffstat (limited to 'nasmlib.h')
-rw-r--r--nasmlib.h36
1 files 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;
}