1 /* Generated by re2c 0.16 */ 2 #line 1 "ext/phar/phar_path_check.re" 3 /* 4 +----------------------------------------------------------------------+ 5 | phar php single-file executable PHP extension | 6 +----------------------------------------------------------------------+ 7 | Copyright (c) 2007-2018 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)25phar_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 if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4); 51 yych = *YYCURSOR; 52 if (yych <= '[') { 53 if (yych <= ')') { 54 if (yych <= '\f') { 55 if (yych >= 0x01) goto yy4; 56 } else { 57 if (yych <= '\r') goto yy6; 58 if (yych <= 0x19) goto yy4; 59 goto yy7; 60 } 61 } else { 62 if (yych <= '/') { 63 if (yych <= '*') goto yy9; 64 if (yych <= '.') goto yy7; 65 goto yy11; 66 } else { 67 if (yych == '?') goto yy12; 68 goto yy7; 69 } 70 } 71 } else { 72 if (yych <= 0xEC) { 73 if (yych <= 0xC1) { 74 if (yych <= '\\') goto yy14; 75 if (yych <= 0x7F) goto yy7; 76 goto yy4; 77 } else { 78 if (yych <= 0xDF) goto yy16; 79 if (yych <= 0xE0) goto yy17; 80 goto yy18; 81 } 82 } else { 83 if (yych <= 0xF0) { 84 if (yych <= 0xED) goto yy19; 85 if (yych <= 0xEF) goto yy18; 86 goto yy20; 87 } else { 88 if (yych <= 0xF3) goto yy21; 89 if (yych <= 0xF4) goto yy22; 90 goto yy4; 91 } 92 } 93 } 94 ++YYCURSOR; 95 #line 93 "ext/phar/phar_path_check.re" 96 { 97 if (**s == '/') { 98 (*s)++; 99 (*len)--; 100 } 101 if ((p - (const unsigned char*)*s) - 1 != *len) 102 { 103 *error ="illegal character"; 104 return pcr_err_illegal_char; 105 } 106 *error = NULL; 107 return pcr_is_ok; 108 } 109 #line 110 "ext/phar/phar_path_check.c" 110 yy4: 111 ++YYCURSOR; 112 yy5: 113 #line 106 "ext/phar/phar_path_check.re" 114 { 115 *error ="illegal character"; 116 return pcr_err_illegal_char; 117 } 118 #line 119 "ext/phar/phar_path_check.c" 119 yy6: 120 yych = *++YYCURSOR; 121 if (yych == '\n') goto yy4; 122 goto yy5; 123 yy7: 124 ++YYCURSOR; 125 yy8: 126 #line 90 "ext/phar/phar_path_check.re" 127 { 128 goto loop; 129 } 130 #line 131 "ext/phar/phar_path_check.c" 131 yy9: 132 ++YYCURSOR; 133 #line 78 "ext/phar/phar_path_check.re" 134 { 135 *error = "star"; 136 return pcr_err_star; 137 } 138 #line 139 "ext/phar/phar_path_check.c" 139 yy11: 140 yyaccept = 0; 141 yych = *(YYMARKER = ++YYCURSOR); 142 if (yych <= '-') goto yy8; 143 if (yych <= '.') goto yy23; 144 if (yych <= '/') goto yy25; 145 goto yy8; 146 yy12: 147 ++YYCURSOR; 148 #line 82 "ext/phar/phar_path_check.re" 149 { 150 if (**s == '/') { 151 (*s)++; 152 } 153 *len = (p - (const unsigned char*)*s) -1; 154 *error = NULL; 155 return pcr_use_query; 156 } 157 #line 158 "ext/phar/phar_path_check.c" 158 yy14: 159 ++YYCURSOR; 160 #line 74 "ext/phar/phar_path_check.re" 161 { 162 *error = "back-slash"; 163 return pcr_err_back_slash; 164 } 165 #line 166 "ext/phar/phar_path_check.c" 166 yy16: 167 yych = *++YYCURSOR; 168 if (yych <= 0x7F) goto yy5; 169 if (yych <= 0xBF) goto yy7; 170 goto yy5; 171 yy17: 172 yyaccept = 1; 173 yych = *(YYMARKER = ++YYCURSOR); 174 if (yych <= 0x9F) goto yy5; 175 if (yych <= 0xBF) goto yy27; 176 goto yy5; 177 yy18: 178 yyaccept = 1; 179 yych = *(YYMARKER = ++YYCURSOR); 180 if (yych <= 0x7F) goto yy5; 181 if (yych <= 0xBF) goto yy27; 182 goto yy5; 183 yy19: 184 yyaccept = 1; 185 yych = *(YYMARKER = ++YYCURSOR); 186 if (yych <= 0x7F) goto yy5; 187 if (yych <= 0x9F) goto yy27; 188 goto yy5; 189 yy20: 190 yyaccept = 1; 191 yych = *(YYMARKER = ++YYCURSOR); 192 if (yych <= 0x8F) goto yy5; 193 if (yych <= 0xBF) goto yy28; 194 goto yy5; 195 yy21: 196 yyaccept = 1; 197 yych = *(YYMARKER = ++YYCURSOR); 198 if (yych <= 0x7F) goto yy5; 199 if (yych <= 0xBF) goto yy28; 200 goto yy5; 201 yy22: 202 yyaccept = 1; 203 yych = *(YYMARKER = ++YYCURSOR); 204 if (yych <= 0x7F) goto yy5; 205 if (yych <= 0x8F) goto yy28; 206 goto yy5; 207 yy23: 208 yych = *++YYCURSOR; 209 if (yych <= 0x00) goto yy29; 210 if (yych <= '-') goto yy24; 211 if (yych <= '.') goto yy31; 212 if (yych <= '/') goto yy29; 213 yy24: 214 YYCURSOR = YYMARKER; 215 if (yyaccept == 0) { 216 goto yy8; 217 } else { 218 goto yy5; 219 } 220 yy25: 221 ++YYCURSOR; 222 #line 62 "ext/phar/phar_path_check.re" 223 { 224 *error = "double slash"; 225 return pcr_err_double_slash; 226 } 227 #line 228 "ext/phar/phar_path_check.c" 228 yy27: 229 yych = *++YYCURSOR; 230 if (yych <= 0x7F) goto yy24; 231 if (yych <= 0xBF) goto yy7; 232 goto yy24; 233 yy28: 234 yych = *++YYCURSOR; 235 if (yych <= 0x7F) goto yy24; 236 if (yych <= 0xBF) goto yy27; 237 goto yy24; 238 yy29: 239 ++YYCURSOR; 240 #line 70 "ext/phar/phar_path_check.re" 241 { 242 *error = "current directory reference"; 243 return pcr_err_curr_dir; 244 } 245 #line 246 "ext/phar/phar_path_check.c" 246 yy31: 247 yych = *++YYCURSOR; 248 if (yych <= 0x00) goto yy32; 249 if (yych != '/') goto yy24; 250 yy32: 251 ++YYCURSOR; 252 #line 66 "ext/phar/phar_path_check.re" 253 { 254 *error = "upper directory reference"; 255 return pcr_err_up_dir; 256 } 257 #line 258 "ext/phar/phar_path_check.c" 258 } 259 #line 110 "ext/phar/phar_path_check.re" 260 261 } 262