xref: /PHP-5.3/ext/phar/phar_path_check.c (revision bc11e6fd)
1 /* Generated by re2c 0.13.5 on Fri Feb 25 04:29:05 2011 */
2 #line 1 "ext/phar/phar_path_check.re"
3 /*
4   +----------------------------------------------------------------------+
5   | phar php single-file executable PHP extension                        |
6   +----------------------------------------------------------------------+
7   | Copyright (c) 2007-2013 The PHP Group                                |
8   +----------------------------------------------------------------------+
9   | This source file is subject to version 3.01 of the PHP license,      |
10   | that is bundled with this package in the file LICENSE, and is        |
11   | available through the world-wide-web at the following url:           |
12   | http://www.php.net/license/3_01.txt.                                 |
13   | If you did not receive a copy of the PHP license and are unable to   |
14   | obtain it through the world-wide-web, please send a note to          |
15   | license@php.net so we can mail you a copy immediately.               |
16   +----------------------------------------------------------------------+
17   | Authors: Marcus Boerger <helly@php.net>                              |
18   +----------------------------------------------------------------------+
19 */
20 
21 /* $Id$ */
22 
23 #include "phar_internal.h"
24 
phar_path_check(char ** s,int * len,const char ** error)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 
50 	if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
51 	yych = *YYCURSOR;
52 	if (yych <= '.') {
53 		if (yych <= '\n') {
54 			if (yych <= 0x00) goto yy13;
55 			if (yych <= '\t') goto yy10;
56 			goto yy12;
57 		} else {
58 			if (yych <= 0x19) goto yy10;
59 			if (yych == '*') goto yy6;
60 			goto yy15;
61 		}
62 	} else {
63 		if (yych <= '?') {
64 			if (yych <= '/') goto yy2;
65 			if (yych <= '>') goto yy15;
66 			goto yy8;
67 		} else {
68 			if (yych == '\\') goto yy4;
69 			if (yych <= 0x7F) goto yy15;
70 			goto yy10;
71 		}
72 	}
73 yy2:
74 	yych = *(YYMARKER = ++YYCURSOR);
75 	if (yych <= '-') goto yy3;
76 	if (yych <= '.') goto yy16;
77 	if (yych <= '/') goto yy18;
78 yy3:
79 #line 93 "ext/phar/phar_path_check.re"
80 	{
81 			goto loop;
82 		}
83 #line 84 "ext/phar/phar_path_check.c"
84 yy4:
85 	++YYCURSOR;
86 #line 60 "ext/phar/phar_path_check.re"
87 	{
88 			*error = "back-slash";
89 			return pcr_err_back_slash;
90 		}
91 #line 92 "ext/phar/phar_path_check.c"
92 yy6:
93 	++YYCURSOR;
94 #line 64 "ext/phar/phar_path_check.re"
95 	{
96 			*error = "star";
97 			return pcr_err_star;
98 		}
99 #line 100 "ext/phar/phar_path_check.c"
100 yy8:
101 	++YYCURSOR;
102 #line 68 "ext/phar/phar_path_check.re"
103 	{
104 			if (**s == '/') {
105 				(*s)++;
106 			}
107 			*len = (p - (const unsigned char*)*s) -1;
108 			*error = NULL;
109 			return pcr_use_query;
110 		}
111 #line 112 "ext/phar/phar_path_check.c"
112 yy10:
113 	++YYCURSOR;
114 yy11:
115 #line 76 "ext/phar/phar_path_check.re"
116 	{
117 			*error ="illegal character";
118 			return pcr_err_illegal_char;
119 		}
120 #line 121 "ext/phar/phar_path_check.c"
121 yy12:
122 	yych = *++YYCURSOR;
123 	goto yy11;
124 yy13:
125 	++YYCURSOR;
126 #line 80 "ext/phar/phar_path_check.re"
127 	{
128 			if (**s == '/') {
129 				(*s)++;
130 				(*len)--;
131 			}
132 			if ((p - (const unsigned char*)*s) - 1 != *len)
133 			{
134 				*error ="illegal character";
135 				return pcr_err_illegal_char;
136 			}
137 			*error = NULL;
138 			return pcr_is_ok;
139 		}
140 #line 141 "ext/phar/phar_path_check.c"
141 yy15:
142 	yych = *++YYCURSOR;
143 	goto yy3;
144 yy16:
145 	yych = *++YYCURSOR;
146 	if (yych <= 0x00) goto yy21;
147 	if (yych <= '-') goto yy17;
148 	if (yych <= '.') goto yy20;
149 	if (yych <= '/') goto yy21;
150 yy17:
151 	YYCURSOR = YYMARKER;
152 	goto yy3;
153 yy18:
154 	++YYCURSOR;
155 #line 48 "ext/phar/phar_path_check.re"
156 	{
157 			*error = "double slash";
158 			return pcr_err_double_slash;
159 		}
160 #line 161 "ext/phar/phar_path_check.c"
161 yy20:
162 	yych = *++YYCURSOR;
163 	if (yych <= 0x00) goto yy23;
164 	if (yych == '/') goto yy23;
165 	goto yy17;
166 yy21:
167 	++YYCURSOR;
168 #line 56 "ext/phar/phar_path_check.re"
169 	{
170 			*error = "current directory reference";
171 			return pcr_err_curr_dir;
172 		}
173 #line 174 "ext/phar/phar_path_check.c"
174 yy23:
175 	++YYCURSOR;
176 #line 52 "ext/phar/phar_path_check.re"
177 	{
178 			*error = "upper directory reference";
179 			return pcr_err_up_dir;
180 		}
181 #line 182 "ext/phar/phar_path_check.c"
182 }
183 #line 96 "ext/phar/phar_path_check.re"
184 
185 }
186