Merge branch 'PHP-5.4' into PHP-5.5

* PHP-5.4:
  Fixed bug #50308 - session id not appended properly for empty anchor tags
This commit is contained in:
Arpad Ray 2013-07-17 16:19:53 +01:00
commit 94ab37f06a
3 changed files with 99 additions and 96 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

@ -764,147 +764,120 @@ state_val:
{ {
YYCTYPE yych; YYCTYPE yych;
static const unsigned char yybm[] = { static const unsigned char yybm[] = {
248, 248, 248, 248, 248, 248, 248, 248, 224, 224, 224, 224, 224, 224, 224, 224,
248, 160, 160, 248, 248, 160, 248, 248, 224, 192, 192, 224, 224, 192, 224, 224,
248, 248, 248, 248, 248, 248, 248, 248, 224, 224, 224, 224, 224, 224, 224, 224,
248, 248, 248, 248, 248, 248, 248, 248, 224, 224, 224, 224, 224, 224, 224, 224,
160, 248, 56, 248, 248, 248, 248, 200, 192, 224, 64, 224, 224, 224, 224, 128,
248, 248, 248, 248, 248, 248, 248, 248, 224, 224, 224, 224, 224, 224, 224, 224,
248, 248, 248, 248, 248, 248, 248, 248, 224, 224, 224, 224, 224, 224, 224, 224,
248, 248, 248, 248, 248, 248, 0, 248, 224, 224, 224, 224, 224, 224, 0, 224,
248, 248, 248, 248, 248, 248, 248, 248, 224, 224, 224, 224, 224, 224, 224, 224,
248, 248, 248, 248, 248, 248, 248, 248, 224, 224, 224, 224, 224, 224, 224, 224,
248, 248, 248, 248, 248, 248, 248, 248, 224, 224, 224, 224, 224, 224, 224, 224,
248, 248, 248, 248, 248, 248, 248, 248, 224, 224, 224, 224, 224, 224, 224, 224,
248, 248, 248, 248, 248, 248, 248, 248, 224, 224, 224, 224, 224, 224, 224, 224,
248, 248, 248, 248, 248, 248, 248, 248, 224, 224, 224, 224, 224, 224, 224, 224,
248, 248, 248, 248, 248, 248, 248, 248, 224, 224, 224, 224, 224, 224, 224, 224,
248, 248, 248, 248, 248, 248, 248, 248, 224, 224, 224, 224, 224, 224, 224, 224,
248, 248, 248, 248, 248, 248, 248, 248, 224, 224, 224, 224, 224, 224, 224, 224,
248, 248, 248, 248, 248, 248, 248, 248, 224, 224, 224, 224, 224, 224, 224, 224,
248, 248, 248, 248, 248, 248, 248, 248, 224, 224, 224, 224, 224, 224, 224, 224,
248, 248, 248, 248, 248, 248, 248, 248, 224, 224, 224, 224, 224, 224, 224, 224,
248, 248, 248, 248, 248, 248, 248, 248, 224, 224, 224, 224, 224, 224, 224, 224,
248, 248, 248, 248, 248, 248, 248, 248, 224, 224, 224, 224, 224, 224, 224, 224,
248, 248, 248, 248, 248, 248, 248, 248, 224, 224, 224, 224, 224, 224, 224, 224,
248, 248, 248, 248, 248, 248, 248, 248, 224, 224, 224, 224, 224, 224, 224, 224,
248, 248, 248, 248, 248, 248, 248, 248, 224, 224, 224, 224, 224, 224, 224, 224,
248, 248, 248, 248, 248, 248, 248, 248, 224, 224, 224, 224, 224, 224, 224, 224,
248, 248, 248, 248, 248, 248, 248, 248, 224, 224, 224, 224, 224, 224, 224, 224,
248, 248, 248, 248, 248, 248, 248, 248, 224, 224, 224, 224, 224, 224, 224, 224,
248, 248, 248, 248, 248, 248, 248, 248, 224, 224, 224, 224, 224, 224, 224, 224,
248, 248, 248, 248, 248, 248, 248, 248, 224, 224, 224, 224, 224, 224, 224, 224,
248, 248, 248, 248, 248, 248, 248, 248, 224, 224, 224, 224, 224, 224, 224, 224,
248, 248, 248, 248, 248, 248, 248, 248, 224, 224, 224, 224, 224, 224, 224, 224,
}; };
if ((YYLIMIT - YYCURSOR) < 3) YYFILL(3); if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR; yych = *YYCURSOR;
if (yych <= ' ') { if (yych <= ' ') {
if (yych <= '\f') { if (yych <= '\f') {
if (yych <= 0x08) goto yy63; if (yych <= 0x08) goto yy63;
if (yych <= '\n') goto yy64; if (yych <= '\n') goto yy65;
goto yy63; goto yy63;
} else { } else {
if (yych <= '\r') goto yy64; if (yych <= '\r') goto yy65;
if (yych <= 0x1F) goto yy63; if (yych <= 0x1F) goto yy63;
goto yy64; goto yy65;
} }
} else { } else {
if (yych <= '&') { if (yych <= '&') {
if (yych != '"') goto yy63; if (yych != '"') goto yy63;
} else { } else {
if (yych <= '\'') goto yy62; if (yych <= '\'') goto yy62;
if (yych == '>') goto yy64; if (yych == '>') goto yy65;
goto yy63; goto yy63;
} }
} }
yych = *(YYMARKER = ++YYCURSOR); yych = *(YYMARKER = ++YYCURSOR);
goto yy77; if (yych != '>') goto yy74;
yy61: yy61:
#line 346 "ext/standard/url_scanner_ex.re" #line 347 "ext/standard/url_scanner_ex.re"
{ handle_val(STD_ARGS, 0, ' '); goto state_next_arg_begin; } { passthru(STD_ARGS); goto state_next_arg_begin; }
#line 827 "ext/standard/url_scanner_ex.c" #line 827 "ext/standard/url_scanner_ex.c"
yy62: yy62:
yych = *(YYMARKER = ++YYCURSOR); yych = *(YYMARKER = ++YYCURSOR);
if (yych == '>') goto yy61;
goto yy69; goto yy69;
yy63: yy63:
yych = *++YYCURSOR; ++YYCURSOR;
yych = *YYCURSOR;
goto yy67; goto yy67;
yy64: yy64:
++YYCURSOR; #line 346 "ext/standard/url_scanner_ex.re"
#line 347 "ext/standard/url_scanner_ex.re" { handle_val(STD_ARGS, 0, ' '); goto state_next_arg_begin; }
{ passthru(STD_ARGS); goto state_next_arg_begin; } #line 839 "ext/standard/url_scanner_ex.c"
#line 838 "ext/standard/url_scanner_ex.c" yy65:
yych = *++YYCURSOR;
goto yy61;
yy66: yy66:
++YYCURSOR; ++YYCURSOR;
if (YYLIMIT <= YYCURSOR) YYFILL(1); if (YYLIMIT <= YYCURSOR) YYFILL(1);
yych = *YYCURSOR; yych = *YYCURSOR;
yy67: yy67:
if (yybm[0+yych] & 8) { if (yybm[0+yych] & 32) {
goto yy66; goto yy66;
} }
goto yy61; goto yy64;
yy68: yy68:
YYMARKER = ++YYCURSOR; ++YYCURSOR;
if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); if (YYLIMIT <= YYCURSOR) YYFILL(1);
yych = *YYCURSOR; yych = *YYCURSOR;
yy69: yy69:
if (yybm[0+yych] & 16) { if (yybm[0+yych] & 64) {
goto yy68; goto yy68;
} }
if (yych <= '&') goto yy72; if (yych <= '=') goto yy71;
if (yych >= '(') goto yy61; yy70:
++YYCURSOR;
if (yybm[0+(yych = *YYCURSOR)] & 8) {
goto yy66;
}
yy71:
#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:
++YYCURSOR;
if (YYLIMIT <= YYCURSOR) YYFILL(1);
yych = *YYCURSOR;
if (yybm[0+yych] & 32) {
goto yy72;
}
if (yych <= '=') goto yy75;
yy74:
YYCURSOR = YYMARKER; YYCURSOR = YYMARKER;
goto yy61; goto yy61;
yy75: yy71:
yych = *++YYCURSOR;
goto yy71;
yy76:
YYMARKER = ++YYCURSOR;
if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2);
yych = *YYCURSOR;
yy77:
if (yybm[0+yych] & 64) {
goto yy76;
}
if (yych <= '!') goto yy80;
if (yych >= '#') goto yy61;
++YYCURSOR; ++YYCURSOR;
if (yybm[0+(yych = *YYCURSOR)] & 8) { #line 345 "ext/standard/url_scanner_ex.re"
goto yy66; { handle_val(STD_ARGS, 1, '\''); goto state_next_arg_begin; }
} #line 868 "ext/standard/url_scanner_ex.c"
yy79: yy73:
#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; ++YYCURSOR;
if (YYLIMIT <= YYCURSOR) YYFILL(1); if (YYLIMIT <= YYCURSOR) YYFILL(1);
yych = *YYCURSOR; yych = *YYCURSOR;
yy74:
if (yybm[0+yych] & 128) { if (yybm[0+yych] & 128) {
goto yy80; goto yy73;
} }
if (yych >= '>') goto yy74; if (yych >= '>') goto yy70;
++YYCURSOR; ++YYCURSOR;
yych = *YYCURSOR; #line 344 "ext/standard/url_scanner_ex.re"
goto yy79; { handle_val(STD_ARGS, 1, '"'); goto state_next_arg_begin; }
#line 881 "ext/standard/url_scanner_ex.c"
} }
#line 348 "ext/standard/url_scanner_ex.re" #line 348 "ext/standard/url_scanner_ex.re"

View file

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