1
0
mirror of https://github.com/php/php-src.git synced 2026-04-01 05:02:27 +02:00

Merge branch 'PHP-5.5'

* PHP-5.5:
  regenerate url scanner
  Fixed bug #50308 - session id not appended properly for empty anchor tags
This commit is contained in:
Arpad Ray
2013-07-17 16:28:12 +01:00
3 changed files with 194 additions and 178 deletions

View File

@@ -0,0 +1,30 @@
--TEST--
Bug #50308 (session id not appended properly for empty anchor tags)
--SKIPIF--
<?php include('skipif.inc'); ?>
--INI--
session.name=PHPSESSID
session.save_handler=files
session.use_trans_sid=1
session.use_only_cookies=0
--FILE--
<?php
@session_start();
?>
<a href=""/>
<a href="" />
<a href="foo"/>
<a href="foo" />
<a href=foo/>
<a href=/>
<a href=?foo=bar/>
<a href="?foo=bar"/>
--EXPECTF--
<a href="?PHPSESSID=%s"/>
<a href="?PHPSESSID=%s" />
<a href="foo?PHPSESSID=%s"/>
<a href="foo?PHPSESSID=%s" />
<a href=foo/?PHPSESSID=%s>
<a href=/?PHPSESSID=%s>
<a href=?foo=bar/&PHPSESSID=%s>
<a href="?foo=bar&PHPSESSID=%s"/>

View File

@@ -544,56 +544,69 @@ state_next_arg:
};
if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR;
if (yych <= ' ') {
if (yych <= '.') {
if (yych <= '\f') {
if (yych <= 0x08) goto yy34;
if (yych <= '\v') goto yy30;
goto yy34;
if (yych <= 0x08) goto yy36;
if (yych <= '\v') goto yy32;
goto yy36;
} else {
if (yych <= '\r') goto yy30;
if (yych <= 0x1F) goto yy34;
goto yy30;
if (yych <= '\r') goto yy32;
if (yych == ' ') goto yy32;
goto yy36;
}
} else {
if (yych <= '@') {
if (yych != '>') goto yy34;
if (yych <= '/') goto yy28;
if (yych == '>') goto yy30;
goto yy36;
} else {
if (yych <= 'Z') goto yy32;
if (yych <= '`') goto yy34;
if (yych <= 'z') goto yy32;
goto yy34;
if (yych <= 'Z') goto yy34;
if (yych <= '`') goto yy36;
if (yych <= 'z') goto yy34;
goto yy36;
}
}
yy28:
++YYCURSOR;
#line 320 "ext/standard/url_scanner_ex.re"
{ passthru(STD_ARGS); handle_form(STD_ARGS); goto state_plain_begin; }
#line 571 "ext/standard/url_scanner_ex.c"
if ((yych = *YYCURSOR) == '>') goto yy39;
yy29:
#line 323 "ext/standard/url_scanner_ex.re"
{ passthru(STD_ARGS); goto state_plain_begin; }
#line 576 "ext/standard/url_scanner_ex.c"
yy30:
++YYCURSOR;
yych = *YYCURSOR;
goto yy37;
yy31:
#line 320 "ext/standard/url_scanner_ex.re"
{ passthru(STD_ARGS); handle_form(STD_ARGS); goto state_plain_begin; }
#line 582 "ext/standard/url_scanner_ex.c"
yy32:
++YYCURSOR;
yych = *YYCURSOR;
goto yy38;
yy33:
#line 321 "ext/standard/url_scanner_ex.re"
{ passthru(STD_ARGS); goto state_next_arg; }
#line 579 "ext/standard/url_scanner_ex.c"
yy32:
#line 590 "ext/standard/url_scanner_ex.c"
yy34:
++YYCURSOR;
#line 322 "ext/standard/url_scanner_ex.re"
{ --YYCURSOR; STATE = STATE_ARG; goto state_arg; }
#line 584 "ext/standard/url_scanner_ex.c"
yy34:
++YYCURSOR;
#line 323 "ext/standard/url_scanner_ex.re"
{ passthru(STD_ARGS); goto state_plain_begin; }
#line 589 "ext/standard/url_scanner_ex.c"
#line 595 "ext/standard/url_scanner_ex.c"
yy36:
yych = *++YYCURSOR;
goto yy29;
yy37:
++YYCURSOR;
if (YYLIMIT <= YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
yy37:
yy38:
if (yybm[0+yych] & 128) {
goto yy36;
goto yy37;
}
goto yy33;
yy39:
++YYCURSOR;
yych = *YYCURSOR;
goto yy31;
}
#line 324 "ext/standard/url_scanner_ex.re"
@@ -602,7 +615,7 @@ yy37:
state_arg:
start = YYCURSOR;
#line 606 "ext/standard/url_scanner_ex.c"
#line 619 "ext/standard/url_scanner_ex.c"
{
YYCTYPE yych;
static const unsigned char yybm[] = {
@@ -641,32 +654,32 @@ state_arg:
};
if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR;
if (yych <= '@') goto yy42;
if (yych <= 'Z') goto yy40;
if (yych <= '`') goto yy42;
if (yych >= '{') goto yy42;
yy40:
if (yych <= '@') goto yy44;
if (yych <= 'Z') goto yy42;
if (yych <= '`') goto yy44;
if (yych >= '{') goto yy44;
yy42:
++YYCURSOR;
yych = *YYCURSOR;
goto yy45;
yy41:
goto yy47;
yy43:
#line 329 "ext/standard/url_scanner_ex.re"
{ passthru(STD_ARGS); handle_arg(STD_ARGS); STATE = STATE_BEFORE_VAL; goto state_before_val; }
#line 656 "ext/standard/url_scanner_ex.c"
yy42:
#line 669 "ext/standard/url_scanner_ex.c"
yy44:
++YYCURSOR;
#line 330 "ext/standard/url_scanner_ex.re"
{ passthru(STD_ARGS); STATE = STATE_NEXT_ARG; goto state_next_arg; }
#line 661 "ext/standard/url_scanner_ex.c"
yy44:
#line 674 "ext/standard/url_scanner_ex.c"
yy46:
++YYCURSOR;
if (YYLIMIT <= YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
yy45:
yy47:
if (yybm[0+yych] & 128) {
goto yy44;
goto yy46;
}
goto yy41;
goto yy43;
}
#line 331 "ext/standard/url_scanner_ex.re"
@@ -674,7 +687,7 @@ yy45:
state_before_val:
start = YYCURSOR;
#line 678 "ext/standard/url_scanner_ex.c"
#line 691 "ext/standard/url_scanner_ex.c"
{
YYCTYPE yych;
static const unsigned char yybm[] = {
@@ -713,45 +726,45 @@ state_before_val:
};
if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR;
if (yych == ' ') goto yy48;
if (yych == '=') goto yy50;
goto yy52;
yy48:
if (yych == ' ') goto yy50;
if (yych == '=') goto yy52;
goto yy54;
yy50:
yych = *(YYMARKER = ++YYCURSOR);
if (yych == ' ') goto yy55;
if (yych == '=') goto yy53;
yy49:
if (yych == ' ') goto yy57;
if (yych == '=') goto yy55;
yy51:
#line 337 "ext/standard/url_scanner_ex.re"
{ --YYCURSOR; goto state_next_arg_begin; }
#line 727 "ext/standard/url_scanner_ex.c"
yy50:
#line 740 "ext/standard/url_scanner_ex.c"
yy52:
++YYCURSOR;
yych = *YYCURSOR;
goto yy54;
yy51:
goto yy56;
yy53:
#line 336 "ext/standard/url_scanner_ex.re"
{ passthru(STD_ARGS); STATE = STATE_VAL; goto state_val; }
#line 735 "ext/standard/url_scanner_ex.c"
yy52:
yych = *++YYCURSOR;
goto yy49;
yy53:
++YYCURSOR;
if (YYLIMIT <= YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
#line 748 "ext/standard/url_scanner_ex.c"
yy54:
if (yybm[0+yych] & 128) {
goto yy53;
}
yych = *++YYCURSOR;
goto yy51;
yy55:
++YYCURSOR;
if (YYLIMIT <= YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
if (yych == ' ') goto yy55;
if (yych == '=') goto yy53;
yy56:
if (yybm[0+yych] & 128) {
goto yy55;
}
goto yy53;
yy57:
++YYCURSOR;
if (YYLIMIT <= YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
if (yych == ' ') goto yy57;
if (yych == '=') goto yy55;
YYCURSOR = YYMARKER;
goto yy49;
goto yy51;
}
#line 338 "ext/standard/url_scanner_ex.re"
@@ -760,151 +773,124 @@ yy55:
state_val:
start = YYCURSOR;
#line 764 "ext/standard/url_scanner_ex.c"
#line 777 "ext/standard/url_scanner_ex.c"
{
YYCTYPE yych;
static const unsigned char yybm[] = {
248, 248, 248, 248, 248, 248, 248, 248,
248, 160, 160, 248, 248, 160, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248,
160, 248, 56, 248, 248, 248, 248, 200,
248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 248, 248, 0, 248,
248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248,
248, 248, 248, 248, 248, 248, 248, 248,
224, 224, 224, 224, 224, 224, 224, 224,
224, 192, 192, 224, 224, 192, 224, 224,
224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 224, 224, 224,
192, 224, 64, 224, 224, 224, 224, 128,
224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 224, 0, 224,
224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 224, 224, 224,
224, 224, 224, 224, 224, 224, 224, 224,
};
if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3);
if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR;
if (yych <= ' ') {
if (yych <= '\f') {
if (yych <= 0x08) goto yy63;
if (yych <= '\n') goto yy64;
goto yy63;
if (yych <= 0x08) goto yy65;
if (yych <= '\n') goto yy67;
goto yy65;
} else {
if (yych <= '\r') goto yy64;
if (yych <= 0x1F) goto yy63;
goto yy64;
if (yych <= '\r') goto yy67;
if (yych <= 0x1F) goto yy65;
goto yy67;
}
} else {
if (yych <= '&') {
if (yych != '"') goto yy63;
if (yych != '"') goto yy65;
} else {
if (yych <= '\'') goto yy62;
if (yych == '>') goto yy64;
goto yy63;
if (yych <= '\'') goto yy64;
if (yych == '>') goto yy67;
goto yy65;
}
}
yych = *(YYMARKER = ++YYCURSOR);
goto yy77;
yy61:
#line 346 "ext/standard/url_scanner_ex.re"
{ handle_val(STD_ARGS, 0, ' '); goto state_next_arg_begin; }
#line 827 "ext/standard/url_scanner_ex.c"
yy62:
yych = *(YYMARKER = ++YYCURSOR);
goto yy69;
if (yych != '>') goto yy76;
yy63:
yych = *++YYCURSOR;
goto yy67;
yy64:
++YYCURSOR;
#line 347 "ext/standard/url_scanner_ex.re"
{ passthru(STD_ARGS); goto state_next_arg_begin; }
#line 838 "ext/standard/url_scanner_ex.c"
#line 840 "ext/standard/url_scanner_ex.c"
yy64:
yych = *(YYMARKER = ++YYCURSOR);
if (yych == '>') goto yy63;
goto yy71;
yy65:
++YYCURSOR;
yych = *YYCURSOR;
goto yy69;
yy66:
#line 346 "ext/standard/url_scanner_ex.re"
{ handle_val(STD_ARGS, 0, ' '); goto state_next_arg_begin; }
#line 852 "ext/standard/url_scanner_ex.c"
yy67:
yych = *++YYCURSOR;
goto yy63;
yy68:
++YYCURSOR;
if (YYLIMIT <= YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
yy67:
if (yybm[0+yych] & 8) {
goto yy66;
}
goto yy61;
yy68:
YYMARKER = ++YYCURSOR;
if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR;
yy69:
if (yybm[0+yych] & 16) {
if (yybm[0+yych] & 32) {
goto yy68;
}
if (yych <= '&') goto yy72;
if (yych >= '(') goto yy61;
goto yy66;
yy70:
++YYCURSOR;
if (yybm[0+(yych = *YYCURSOR)] & 8) {
goto yy66;
}
if (YYLIMIT <= YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
yy71:
if (yybm[0+yych] & 64) {
goto yy70;
}
if (yych <= '=') goto yy73;
yy72:
YYCURSOR = YYMARKER;
goto yy63;
yy73:
++YYCURSOR;
#line 345 "ext/standard/url_scanner_ex.re"
{ handle_val(STD_ARGS, 1, '\''); goto state_next_arg_begin; }
#line 865 "ext/standard/url_scanner_ex.c"
yy72:
#line 881 "ext/standard/url_scanner_ex.c"
yy75:
++YYCURSOR;
if (YYLIMIT <= YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
if (yybm[0+yych] & 32) {
goto yy72;
}
if (yych <= '=') goto yy75;
yy74:
YYCURSOR = YYMARKER;
goto yy61;
yy75:
yych = *++YYCURSOR;
goto yy71;
yy76:
YYMARKER = ++YYCURSOR;
if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR;
yy77:
if (yybm[0+yych] & 64) {
goto yy76;
if (yybm[0+yych] & 128) {
goto yy75;
}
if (yych <= '!') goto yy80;
if (yych >= '#') goto yy61;
if (yych >= '>') goto yy72;
++YYCURSOR;
if (yybm[0+(yych = *YYCURSOR)] & 8) {
goto yy66;
}
yy79:
#line 344 "ext/standard/url_scanner_ex.re"
{ handle_val(STD_ARGS, 1, '"'); goto state_next_arg_begin; }
#line 897 "ext/standard/url_scanner_ex.c"
yy80:
++YYCURSOR;
if (YYLIMIT <= YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
if (yybm[0+yych] & 128) {
goto yy80;
}
if (yych >= '>') goto yy74;
++YYCURSOR;
yych = *YYCURSOR;
goto yy79;
#line 894 "ext/standard/url_scanner_ex.c"
}
#line 348 "ext/standard/url_scanner_ex.re"

View File

@@ -317,7 +317,7 @@ state_next_arg_begin:
state_next_arg:
start = YYCURSOR;
/*!re2c
">" { passthru(STD_ARGS); handle_form(STD_ARGS); goto state_plain_begin; }
[/]? [>] { passthru(STD_ARGS); handle_form(STD_ARGS); goto state_plain_begin; }
[ \v\r\t\n]+ { passthru(STD_ARGS); goto state_next_arg; }
alpha { --YYCURSOR; STATE = STATE_ARG; goto state_arg; }
any { passthru(STD_ARGS); goto state_plain_begin; }
@@ -343,7 +343,7 @@ state_val:
/*!re2c
["] (any\[">])* ["] { handle_val(STD_ARGS, 1, '"'); goto state_next_arg_begin; }
['] (any\['>])* ['] { handle_val(STD_ARGS, 1, '\''); goto state_next_arg_begin; }
(any\[ \r\t\n>])+ { handle_val(STD_ARGS, 0, ' '); goto state_next_arg_begin; }
(any\[ \r\t\n>'"])+ { handle_val(STD_ARGS, 0, ' '); goto state_next_arg_begin; }
any { passthru(STD_ARGS); goto state_next_arg_begin; }
*/