1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 #ifndef ZEND_RANGE_CHECK_H
20 #define ZEND_RANGE_CHECK_H
21
22 #include "zend_long.h"
23
24
25
26
27 #if SIZEOF_INT < SIZEOF_ZEND_LONG
28 # define ZEND_LONG_CAN_OVFL_INT 1
29 # define ZEND_LONG_CAN_OVFL_UINT 1
30 #endif
31
32 #if SIZEOF_INT < SIZEOF_SIZE_T
33
34
35
36 # define ZEND_SIZE_T_CAN_OVFL_UINT 1
37 #endif
38
39
40
41 #ifdef ZEND_LONG_CAN_OVFL_INT
42 # define ZEND_LONG_INT_OVFL(zlong) UNEXPECTED((zlong) > (zend_long)INT_MAX)
43 # define ZEND_LONG_INT_UDFL(zlong) UNEXPECTED((zlong) < (zend_long)INT_MIN)
44 # define ZEND_LONG_EXCEEDS_INT(zlong) UNEXPECTED(ZEND_LONG_INT_OVFL(zlong) || ZEND_LONG_INT_UDFL(zlong))
45 # define ZEND_LONG_UINT_OVFL(zlong) UNEXPECTED((zlong) < 0 || (zlong) > (zend_long)UINT_MAX)
46 #else
47 # define ZEND_LONG_INT_OVFL(zl) (0)
48 # define ZEND_LONG_INT_UDFL(zl) (0)
49 # define ZEND_LONG_EXCEEDS_INT(zlong) (0)
50 # define ZEND_LONG_UINT_OVFL(zl) (0)
51 #endif
52
53
54 #define ZEND_SIZE_T_INT_OVFL(size) UNEXPECTED((size) > (size_t)INT_MAX)
55 #ifdef ZEND_SIZE_T_CAN_OVFL_UINT
56 # define ZEND_SIZE_T_UINT_OVFL(size) UNEXPECTED((size) > (size_t)UINT_MAX)
57 #else
58 # define ZEND_SIZE_T_UINT_OVFL(size) (0)
59 #endif
60
61
62 #define ZEND_SIZE_T_GT_ZEND_LONG(size, zlong) ((zlong) < 0 || (size) > (size_t)(zlong))
63 #define ZEND_SIZE_T_GTE_ZEND_LONG(size, zlong) ((zlong) < 0 || (size) >= (size_t)(zlong))
64 #define ZEND_SIZE_T_LT_ZEND_LONG(size, zlong) ((zlong) >= 0 && (size) < (size_t)(zlong))
65 #define ZEND_SIZE_T_LTE_ZEND_LONG(size, zlong) ((zlong) >= 0 && (size) <= (size_t)(zlong))
66
67 #endif
68
69
70
71
72
73
74
75