phar_path_check.c 6.7 KB

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