1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 #ifndef FILTER_PRIVATE_H
22 #define FILTER_PRIVATE_H
23
24 #define FILTER_FLAG_NONE 0x0000
25
26 #define FILTER_REQUIRE_ARRAY 0x1000000
27 #define FILTER_REQUIRE_SCALAR 0x2000000
28
29 #define FILTER_FORCE_ARRAY 0x4000000
30 #define FILTER_NULL_ON_FAILURE 0x8000000
31
32 #define FILTER_FLAG_ALLOW_OCTAL 0x0001
33 #define FILTER_FLAG_ALLOW_HEX 0x0002
34
35 #define FILTER_FLAG_STRIP_LOW 0x0004
36 #define FILTER_FLAG_STRIP_HIGH 0x0008
37 #define FILTER_FLAG_ENCODE_LOW 0x0010
38 #define FILTER_FLAG_ENCODE_HIGH 0x0020
39 #define FILTER_FLAG_ENCODE_AMP 0x0040
40 #define FILTER_FLAG_NO_ENCODE_QUOTES 0x0080
41 #define FILTER_FLAG_EMPTY_STRING_NULL 0x0100
42 #define FILTER_FLAG_STRIP_BACKTICK 0x0200
43
44 #define FILTER_FLAG_ALLOW_FRACTION 0x1000
45 #define FILTER_FLAG_ALLOW_THOUSAND 0x2000
46 #define FILTER_FLAG_ALLOW_SCIENTIFIC 0x4000
47
48 #define FILTER_FLAG_SCHEME_REQUIRED 0x010000
49 #define FILTER_FLAG_HOST_REQUIRED 0x020000
50 #define FILTER_FLAG_PATH_REQUIRED 0x040000
51 #define FILTER_FLAG_QUERY_REQUIRED 0x080000
52
53 #define FILTER_FLAG_IPV4 0x100000
54 #define FILTER_FLAG_IPV6 0x200000
55 #define FILTER_FLAG_NO_RES_RANGE 0x400000
56 #define FILTER_FLAG_NO_PRIV_RANGE 0x800000
57
58 #define FILTER_VALIDATE_INT 0x0101
59 #define FILTER_VALIDATE_BOOLEAN 0x0102
60 #define FILTER_VALIDATE_FLOAT 0x0103
61
62 #define FILTER_VALIDATE_REGEXP 0x0110
63 #define FILTER_VALIDATE_URL 0x0111
64 #define FILTER_VALIDATE_EMAIL 0x0112
65 #define FILTER_VALIDATE_IP 0x0113
66 #define FILTER_VALIDATE_MAC 0x0114
67 #define FILTER_VALIDATE_LAST 0x0114
68
69 #define FILTER_VALIDATE_ALL 0x0100
70
71 #define FILTER_DEFAULT 0x0204
72 #define FILTER_UNSAFE_RAW 0x0204
73
74 #define FILTER_SANITIZE_STRING 0x0201
75 #define FILTER_SANITIZE_ENCODED 0x0202
76 #define FILTER_SANITIZE_SPECIAL_CHARS 0x0203
77 #define FILTER_SANITIZE_EMAIL 0x0205
78 #define FILTER_SANITIZE_URL 0x0206
79 #define FILTER_SANITIZE_NUMBER_INT 0x0207
80 #define FILTER_SANITIZE_NUMBER_FLOAT 0x0208
81 #define FILTER_SANITIZE_MAGIC_QUOTES 0x0209
82 #define FILTER_SANITIZE_FULL_SPECIAL_CHARS 0x020a
83 #define FILTER_SANITIZE_LAST 0x020a
84
85 #define FILTER_SANITIZE_ALL 0x0200
86
87 #define FILTER_CALLBACK 0x0400
88
89 #define PHP_FILTER_ID_EXISTS(id) \
90 ((id >= FILTER_SANITIZE_ALL && id <= FILTER_SANITIZE_LAST) \
91 || (id >= FILTER_VALIDATE_ALL && id <= FILTER_VALIDATE_LAST) \
92 || id == FILTER_CALLBACK)
93
94 #define RETURN_VALIDATION_FAILED \
95 zval_dtor(value); \
96 if (flags & FILTER_NULL_ON_FAILURE) { \
97 ZVAL_NULL(value); \
98 } else { \
99 ZVAL_FALSE(value); \
100 } \
101 return; \
102
103 #define PHP_FILTER_TRIM_DEFAULT(p, len) PHP_FILTER_TRIM_DEFAULT_EX(p, len, 1);
104
105 #define PHP_FILTER_TRIM_DEFAULT_EX(p, len, return_if_empty) { \
106 while ((len > 0) && (*p == ' ' || *p == '\t' || *p == '\r' || *p == '\v' || *p == '\n')) { \
107 p++; \
108 len--; \
109 } \
110 if (len < 1 && return_if_empty) { \
111 RETURN_VALIDATION_FAILED \
112 } \
113 if (len > 0) { \
114 while (p[len-1] == ' ' || p[len-1] == '\t' || p[len-1] == '\r' || p[len-1] == '\v' || p[len-1] == '\n') { \
115 len--; \
116 } \
117 } \
118 }
119
120 #define PHP_FILTER_GET_LONG_OPT(zv, opt) { \
121 if (Z_TYPE_PP(zv) != IS_LONG) { \
122 zval ___tmp = **zv; \
123 zval_copy_ctor(&___tmp); \
124 convert_to_long(&___tmp); \
125 opt = Z_LVAL(___tmp); \
126 } else { \
127 opt = Z_LVAL_PP(zv); \
128 } \
129 }
130
131 #endif
132
133
134
135
136
137
138
139
140