1
2 #line 1 "ext/phar/phar_path_check.re"
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 #include "phar_internal.h"
24
25 phar_path_check_result phar_path_check(char **s, int *len, const char **error)
26 {
27 const unsigned char *p = (const unsigned char*)*s;
28 const unsigned char *m;
29
30 if (*len == 1 && *p == '.') {
31 *error = "current directory reference";
32 return pcr_err_curr_dir;
33 } else if (*len == 2 && p[0] == '.' && p[1] == '.') {
34 *error = "upper directory reference";
35 return pcr_err_up_dir;
36 }
37
38 #define YYCTYPE unsigned char
39 #define YYCURSOR p
40 #define YYLIMIT p+*len
41 #define YYMARKER m
42 #define YYFILL(n)
43
44 loop:
45
46 #line 47 "ext/phar/phar_path_check.c"
47 {
48 YYCTYPE yych;
49 unsigned int yyaccept = 0;
50
51 if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
52 yych = *YYCURSOR;
53 if (yych <= '[') {
54 if (yych <= ')') {
55 if (yych <= '\t') {
56 if (yych <= 0x00) goto yy21;
57 goto yy23;
58 } else {
59 if (yych <= '\n') goto yy2;
60 if (yych <= 0x19) goto yy23;
61 goto yy11;
62 }
63 } else {
64 if (yych <= '/') {
65 if (yych <= '*') goto yy7;
66 if (yych <= '.') goto yy11;
67 goto yy3;
68 } else {
69 if (yych == '?') goto yy9;
70 goto yy11;
71 }
72 }
73 } else {
74 if (yych <= 0xEC) {
75 if (yych <= 0xC1) {
76 if (yych <= '\\') goto yy5;
77 if (yych <= 0x7F) goto yy11;
78 goto yy23;
79 } else {
80 if (yych <= 0xDF) goto yy12;
81 if (yych <= 0xE0) goto yy14;
82 goto yy15;
83 }
84 } else {
85 if (yych <= 0xF0) {
86 if (yych <= 0xED) goto yy16;
87 if (yych <= 0xEF) goto yy17;
88 goto yy18;
89 } else {
90 if (yych <= 0xF3) goto yy19;
91 if (yych <= 0xF4) goto yy20;
92 goto yy23;
93 }
94 }
95 }
96 yy2:
97 YYCURSOR = YYMARKER;
98 if (yyaccept <= 0) {
99 goto yy4;
100 } else {
101 goto yy13;
102 }
103 yy3:
104 yyaccept = 0;
105 yych = *(YYMARKER = ++YYCURSOR);
106 if (yych <= '-') goto yy4;
107 if (yych <= '.') goto yy35;
108 if (yych <= '/') goto yy36;
109 yy4:
110 #line 88 "ext/phar/phar_path_check.re"
111 {
112 goto loop;
113 }
114 #line 115 "ext/phar/phar_path_check.c"
115 yy5:
116 ++YYCURSOR;
117 #line 72 "ext/phar/phar_path_check.re"
118 {
119 *error = "back-slash";
120 return pcr_err_back_slash;
121 }
122 #line 123 "ext/phar/phar_path_check.c"
123 yy7:
124 ++YYCURSOR;
125 #line 76 "ext/phar/phar_path_check.re"
126 {
127 *error = "star";
128 return pcr_err_star;
129 }
130 #line 131 "ext/phar/phar_path_check.c"
131 yy9:
132 ++YYCURSOR;
133 #line 80 "ext/phar/phar_path_check.re"
134 {
135 if (**s == '/') {
136 (*s)++;
137 }
138 *len = (p - (const unsigned char*)*s) -1;
139 *error = NULL;
140 return pcr_use_query;
141 }
142 #line 143 "ext/phar/phar_path_check.c"
143 yy11:
144 yych = *++YYCURSOR;
145 goto yy4;
146 yy12:
147 ++YYCURSOR;
148 if ((yych = *YYCURSOR) <= 0x7F) goto yy13;
149 if (yych <= 0xBF) goto yy26;
150 yy13:
151 #line 104 "ext/phar/phar_path_check.re"
152 {
153 *error ="illegal character";
154 return pcr_err_illegal_char;
155 }
156 #line 157 "ext/phar/phar_path_check.c"
157 yy14:
158 yyaccept = 1;
159 yych = *(YYMARKER = ++YYCURSOR);
160 if (yych <= 0x9F) goto yy13;
161 if (yych <= 0xBF) goto yy34;
162 goto yy13;
163 yy15:
164 yyaccept = 1;
165 yych = *(YYMARKER = ++YYCURSOR);
166 if (yych <= 0x7F) goto yy13;
167 if (yych <= 0xBF) goto yy33;
168 goto yy13;
169 yy16:
170 yyaccept = 1;
171 yych = *(YYMARKER = ++YYCURSOR);
172 if (yych <= 0x7F) goto yy13;
173 if (yych <= 0x9F) goto yy32;
174 goto yy13;
175 yy17:
176 yyaccept = 1;
177 yych = *(YYMARKER = ++YYCURSOR);
178 if (yych <= 0x7F) goto yy13;
179 if (yych <= 0xBF) goto yy31;
180 goto yy13;
181 yy18:
182 yyaccept = 1;
183 yych = *(YYMARKER = ++YYCURSOR);
184 if (yych <= 0x8F) goto yy13;
185 if (yych <= 0xBF) goto yy29;
186 goto yy13;
187 yy19:
188 yyaccept = 1;
189 yych = *(YYMARKER = ++YYCURSOR);
190 if (yych <= 0x7F) goto yy13;
191 if (yych <= 0xBF) goto yy27;
192 goto yy13;
193 yy20:
194 yyaccept = 1;
195 yych = *(YYMARKER = ++YYCURSOR);
196 if (yych <= 0x7F) goto yy13;
197 if (yych <= 0x8F) goto yy24;
198 goto yy13;
199 yy21:
200 ++YYCURSOR;
201 #line 91 "ext/phar/phar_path_check.re"
202 {
203 if (**s == '/') {
204 (*s)++;
205 (*len)--;
206 }
207 if ((p - (const unsigned char*)*s) - 1 != *len)
208 {
209 *error ="illegal character";
210 return pcr_err_illegal_char;
211 }
212 *error = NULL;
213 return pcr_is_ok;
214 }
215 #line 216 "ext/phar/phar_path_check.c"
216 yy23:
217 yych = *++YYCURSOR;
218 goto yy13;
219 yy24:
220 yych = *++YYCURSOR;
221 if (yych <= 0x7F) goto yy2;
222 if (yych >= 0xC0) goto yy2;
223 yych = *++YYCURSOR;
224 if (yych <= 0x7F) goto yy2;
225 if (yych >= 0xC0) goto yy2;
226 yy26:
227 yych = *++YYCURSOR;
228 goto yy4;
229 yy27:
230 yych = *++YYCURSOR;
231 if (yych <= 0x7F) goto yy2;
232 if (yych >= 0xC0) goto yy2;
233 yych = *++YYCURSOR;
234 if (yych <= 0x7F) goto yy2;
235 if (yych <= 0xBF) goto yy26;
236 goto yy2;
237 yy29:
238 yych = *++YYCURSOR;
239 if (yych <= 0x7F) goto yy2;
240 if (yych >= 0xC0) goto yy2;
241 yych = *++YYCURSOR;
242 if (yych <= 0x7F) goto yy2;
243 if (yych <= 0xBF) goto yy26;
244 goto yy2;
245 yy31:
246 yych = *++YYCURSOR;
247 if (yych <= 0x7F) goto yy2;
248 if (yych <= 0xBF) goto yy26;
249 goto yy2;
250 yy32:
251 yych = *++YYCURSOR;
252 if (yych <= 0x7F) goto yy2;
253 if (yych <= 0xBF) goto yy26;
254 goto yy2;
255 yy33:
256 yych = *++YYCURSOR;
257 if (yych <= 0x7F) goto yy2;
258 if (yych <= 0xBF) goto yy26;
259 goto yy2;
260 yy34:
261 yych = *++YYCURSOR;
262 if (yych <= 0x7F) goto yy2;
263 if (yych <= 0xBF) goto yy26;
264 goto yy2;
265 yy35:
266 yych = *++YYCURSOR;
267 if (yych <= 0x00) goto yy39;
268 if (yych <= '-') goto yy2;
269 if (yych <= '.') goto yy38;
270 if (yych <= '/') goto yy39;
271 goto yy2;
272 yy36:
273 ++YYCURSOR;
274 #line 60 "ext/phar/phar_path_check.re"
275 {
276 *error = "double slash";
277 return pcr_err_double_slash;
278 }
279 #line 280 "ext/phar/phar_path_check.c"
280 yy38:
281 yych = *++YYCURSOR;
282 if (yych <= 0x00) goto yy41;
283 if (yych == '/') goto yy41;
284 goto yy2;
285 yy39:
286 ++YYCURSOR;
287 #line 68 "ext/phar/phar_path_check.re"
288 {
289 *error = "current directory reference";
290 return pcr_err_curr_dir;
291 }
292 #line 293 "ext/phar/phar_path_check.c"
293 yy41:
294 ++YYCURSOR;
295 #line 64 "ext/phar/phar_path_check.re"
296 {
297 *error = "upper directory reference";
298 return pcr_err_up_dir;
299 }
300 #line 301 "ext/phar/phar_path_check.c"
301 }
302 #line 108 "ext/phar/phar_path_check.re"
303
304 }