Skip to content

PHAR: Fix accepting ill-formed UTF-8 characters #649

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
279 changes: 168 additions & 111 deletions ext/phar/phar_path_check.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* Generated by re2c 0.13.5 */
/* Generated by re2c 0.13.6 */
#line 1 "ext/phar/phar_path_check.re"
/*
+----------------------------------------------------------------------+
Expand Down Expand Up @@ -50,65 +50,87 @@ phar_path_check_result phar_path_check(char **s, int *len, const char **error)

if ((YYLIMIT - YYCURSOR) < 4) YYFILL(4);
yych = *YYCURSOR;
if (yych <= '>') {
if (yych <= 0x19) {
if (yych <= 0x00) goto yy16;
if (yych == '\n') goto yy15;
goto yy14;
if (yych <= '[') {
if (yych <= ')') {
if (yych <= '\t') {
if (yych <= 0x00) goto yy21;
goto yy23;
} else {
if (yych <= '\n') goto yy2;
if (yych <= 0x19) goto yy23;
goto yy11;
}
} else {
if (yych <= '*') {
if (yych <= ')') goto yy18;
goto yy6;
if (yych <= '/') {
if (yych <= '*') goto yy7;
if (yych <= '.') goto yy11;
goto yy3;
} else {
if (yych != '/') goto yy18;
if (yych == '?') goto yy9;
goto yy11;
}
}
} else {
if (yych <= 0x7F) {
if (yych <= '?') goto yy8;
if (yych == '\\') goto yy4;
goto yy18;
if (yych <= 0xEC) {
if (yych <= 0xC1) {
if (yych <= '\\') goto yy5;
if (yych <= 0x7F) goto yy11;
goto yy23;
} else {
if (yych <= 0xDF) goto yy12;
if (yych <= 0xE0) goto yy14;
goto yy15;
}
} else {
if (yych <= 0xDF) {
if (yych <= 0xBF) goto yy14;
goto yy10;
if (yych <= 0xF0) {
if (yych <= 0xED) goto yy16;
if (yych <= 0xEF) goto yy17;
goto yy18;
} else {
if (yych <= 0xEF) goto yy12;
if (yych <= 0xF7) goto yy13;
goto yy14;
if (yych <= 0xF3) goto yy19;
if (yych <= 0xF4) goto yy20;
goto yy23;
}
}
}
yy2:
YYCURSOR = YYMARKER;
if (yyaccept == 0) {
goto yy4;
} else {
goto yy13;
}
yy3:
yyaccept = 0;
yych = *(YYMARKER = ++YYCURSOR);
if (yych <= '-') goto yy3;
if (yych <= '.') goto yy29;
if (yych <= '/') goto yy30;
yy3:
#line 105 "ext/phar/phar_path_check.re"
if (yych <= '-') goto yy4;
if (yych <= '.') goto yy35;
if (yych <= '/') goto yy36;
yy4:
#line 88 "ext/phar/phar_path_check.re"
{
goto loop;
}
#line 93 "ext/phar/phar_path_check.c"
yy4:
#line 115 "ext/phar/phar_path_check.c"
yy5:
++YYCURSOR;
#line 63 "ext/phar/phar_path_check.re"
#line 72 "ext/phar/phar_path_check.re"
{
*error = "back-slash";
return pcr_err_back_slash;
}
#line 101 "ext/phar/phar_path_check.c"
yy6:
#line 123 "ext/phar/phar_path_check.c"
yy7:
++YYCURSOR;
#line 67 "ext/phar/phar_path_check.re"
#line 76 "ext/phar/phar_path_check.re"
{
*error = "star";
return pcr_err_star;
}
#line 109 "ext/phar/phar_path_check.c"
yy8:
#line 131 "ext/phar/phar_path_check.c"
yy9:
++YYCURSOR;
#line 71 "ext/phar/phar_path_check.re"
#line 80 "ext/phar/phar_path_check.re"
{
if (**s == '/') {
(*s)++;
Expand All @@ -117,39 +139,66 @@ phar_path_check_result phar_path_check(char **s, int *len, const char **error)
*error = NULL;
return pcr_use_query;
}
#line 121 "ext/phar/phar_path_check.c"
yy10:
++YYCURSOR;
if ((yych = *YYCURSOR) <= 0x7F) goto yy11;
if (yych <= 0xBF) goto yy27;
#line 143 "ext/phar/phar_path_check.c"
yy11:
#line 88 "ext/phar/phar_path_check.re"
yych = *++YYCURSOR;
goto yy4;
yy12:
++YYCURSOR;
if ((yych = *YYCURSOR) <= 0x7F) goto yy13;
if (yych <= 0xBF) goto yy26;
yy13:
#line 104 "ext/phar/phar_path_check.re"
{
*error ="illegal character";
return pcr_err_illegal_char;
}
#line 132 "ext/phar/phar_path_check.c"
yy12:
#line 157 "ext/phar/phar_path_check.c"
yy14:
yyaccept = 1;
yych = *(YYMARKER = ++YYCURSOR);
if (yych <= 0x7F) goto yy11;
if (yych <= 0xBF) goto yy24;
goto yy11;
yy13:
if (yych <= 0x9F) goto yy13;
if (yych <= 0xBF) goto yy34;
goto yy13;
yy15:
yyaccept = 1;
yych = *(YYMARKER = ++YYCURSOR);
if (yych <= 0x7F) goto yy11;
if (yych <= 0xBF) goto yy19;
goto yy11;
yy14:
yych = *++YYCURSOR;
goto yy11;
yy15:
yych = *++YYCURSOR;
goto yy11;
if (yych <= 0x7F) goto yy13;
if (yych <= 0xBF) goto yy33;
goto yy13;
yy16:
yyaccept = 1;
yych = *(YYMARKER = ++YYCURSOR);
if (yych <= 0x7F) goto yy13;
if (yych <= 0x9F) goto yy32;
goto yy13;
yy17:
yyaccept = 1;
yych = *(YYMARKER = ++YYCURSOR);
if (yych <= 0x7F) goto yy13;
if (yych <= 0xBF) goto yy31;
goto yy13;
yy18:
yyaccept = 1;
yych = *(YYMARKER = ++YYCURSOR);
if (yych <= 0x8F) goto yy13;
if (yych <= 0xBF) goto yy29;
goto yy13;
yy19:
yyaccept = 1;
yych = *(YYMARKER = ++YYCURSOR);
if (yych <= 0x7F) goto yy13;
if (yych <= 0xBF) goto yy27;
goto yy13;
yy20:
yyaccept = 1;
yych = *(YYMARKER = ++YYCURSOR);
if (yych <= 0x7F) goto yy13;
if (yych <= 0x8F) goto yy24;
goto yy13;
yy21:
++YYCURSOR;
#line 92 "ext/phar/phar_path_check.re"
#line 91 "ext/phar/phar_path_check.re"
{
if (**s == '/') {
(*s)++;
Expand All @@ -163,84 +212,92 @@ phar_path_check_result phar_path_check(char **s, int *len, const char **error)
*error = NULL;
return pcr_is_ok;
}
#line 167 "ext/phar/phar_path_check.c"
yy18:
#line 216 "ext/phar/phar_path_check.c"
yy23:
yych = *++YYCURSOR;
goto yy3;
yy19:
goto yy13;
yy24:
yych = *++YYCURSOR;
if (yych <= 0x7F) goto yy20;
if (yych <= 0xBF) goto yy21;
yy20:
YYCURSOR = YYMARKER;
if (yyaccept <= 0) {
goto yy3;
} else {
goto yy11;
}
yy21:
if (yych <= 0x7F) goto yy2;
if (yych >= 0xC0) goto yy2;
yych = *++YYCURSOR;
if (yych <= 0x7F) goto yy20;
if (yych >= 0xC0) goto yy20;
++YYCURSOR;
#line 85 "ext/phar/phar_path_check.re"
{
goto loop;
}
#line 191 "ext/phar/phar_path_check.c"
yy24:
if (yych <= 0x7F) goto yy2;
if (yych >= 0xC0) goto yy2;
yy26:
yych = *++YYCURSOR;
if (yych <= 0x7F) goto yy20;
if (yych >= 0xC0) goto yy20;
++YYCURSOR;
#line 82 "ext/phar/phar_path_check.re"
{
goto loop;
}
#line 201 "ext/phar/phar_path_check.c"
goto yy4;
yy27:
++YYCURSOR;
#line 79 "ext/phar/phar_path_check.re"
{
goto loop;
}
#line 208 "ext/phar/phar_path_check.c"
yych = *++YYCURSOR;
if (yych <= 0x7F) goto yy2;
if (yych >= 0xC0) goto yy2;
yych = *++YYCURSOR;
if (yych <= 0x7F) goto yy2;
if (yych <= 0xBF) goto yy26;
goto yy2;
yy29:
yych = *++YYCURSOR;
if (yych <= 0x00) goto yy33;
if (yych <= '-') goto yy20;
if (yych <= '.') goto yy32;
if (yych <= '/') goto yy33;
goto yy20;
yy30:
if (yych <= 0x7F) goto yy2;
if (yych >= 0xC0) goto yy2;
yych = *++YYCURSOR;
if (yych <= 0x7F) goto yy2;
if (yych <= 0xBF) goto yy26;
goto yy2;
yy31:
yych = *++YYCURSOR;
if (yych <= 0x7F) goto yy2;
if (yych <= 0xBF) goto yy26;
goto yy2;
yy32:
yych = *++YYCURSOR;
if (yych <= 0x7F) goto yy2;
if (yych <= 0xBF) goto yy26;
goto yy2;
yy33:
yych = *++YYCURSOR;
if (yych <= 0x7F) goto yy2;
if (yych <= 0xBF) goto yy26;
goto yy2;
yy34:
yych = *++YYCURSOR;
if (yych <= 0x7F) goto yy2;
if (yych <= 0xBF) goto yy26;
goto yy2;
yy35:
yych = *++YYCURSOR;
if (yych <= 0x00) goto yy39;
if (yych <= '-') goto yy2;
if (yych <= '.') goto yy38;
if (yych <= '/') goto yy39;
goto yy2;
yy36:
++YYCURSOR;
#line 51 "ext/phar/phar_path_check.re"
#line 60 "ext/phar/phar_path_check.re"
{
*error = "double slash";
return pcr_err_double_slash;
}
#line 223 "ext/phar/phar_path_check.c"
yy32:
#line 280 "ext/phar/phar_path_check.c"
yy38:
yych = *++YYCURSOR;
if (yych <= 0x00) goto yy35;
if (yych == '/') goto yy35;
goto yy20;
yy33:
if (yych <= 0x00) goto yy41;
if (yych == '/') goto yy41;
goto yy2;
yy39:
++YYCURSOR;
#line 59 "ext/phar/phar_path_check.re"
#line 68 "ext/phar/phar_path_check.re"
{
*error = "current directory reference";
return pcr_err_curr_dir;
}
#line 236 "ext/phar/phar_path_check.c"
yy35:
#line 293 "ext/phar/phar_path_check.c"
yy41:
++YYCURSOR;
#line 55 "ext/phar/phar_path_check.re"
#line 64 "ext/phar/phar_path_check.re"
{
*error = "upper directory reference";
return pcr_err_up_dir;
}
#line 244 "ext/phar/phar_path_check.c"
#line 301 "ext/phar/phar_path_check.c"
}
#line 108 "ext/phar/phar_path_check.re"

Expand Down
Loading