From e6ae977082bcff9c2ef0db4db58df2b07561c0a1 Mon Sep 17 00:00:00 2001 From: Arpad Ray Date: Wed, 17 Jul 2013 16:07:26 +0100 Subject: [PATCH 1/2] Fixed bug #50308 - session id not appended properly for empty anchor tags The issue was actually because a lack of space before a "/" marking the tag as empty. This was being swallowed in the rule for unquoted values. Fixed by making that rule exclude quotes (as per spec anyway). --- NEWS | 2 + ext/session/tests/bug50308.phpt | 30 ++++++ ext/standard/url_scanner_ex.c | 163 +++++++++++++------------------- ext/standard/url_scanner_ex.re | 4 +- 4 files changed, 102 insertions(+), 97 deletions(-) create mode 100644 ext/session/tests/bug50308.phpt diff --git a/NEWS b/NEWS index 4f6a111f515..00442ebb8f6 100644 --- a/NEWS +++ b/NEWS @@ -77,6 +77,8 @@ PHP NEWS oorza2k5 at gmail dot com (Yasuo) . Fixed bug #62129 (rfc1867 crashes php even though turned off). (gxd305 at gmail dot com) + . Fixed bug #50308 (session id not appended properly for empty anchor tags). + (Arpad) - Sockets: . Implemented FR #63472 (Setting SO_BINDTODEVICE with socket_set_option). diff --git a/ext/session/tests/bug50308.phpt b/ext/session/tests/bug50308.phpt new file mode 100644 index 00000000000..110277ce3c8 --- /dev/null +++ b/ext/session/tests/bug50308.phpt @@ -0,0 +1,30 @@ +--TEST-- +Bug #50308 (session id not appended properly for empty anchor tags) +--SKIPIF-- + +--INI-- +session.name=PHPSESSID +session.save_handler=files +session.use_trans_sid=1 +session.use_only_cookies=0 +--FILE-- + + + + + + + + + +--EXPECTF-- + + + + + + + + diff --git a/ext/standard/url_scanner_ex.c b/ext/standard/url_scanner_ex.c index 9aff2cb61ec..236276a648a 100644 --- a/ext/standard/url_scanner_ex.c +++ b/ext/standard/url_scanner_ex.c @@ -1,4 +1,4 @@ -/* Generated by re2c 0.13.5 on Tue Jan 1 16:28:14 2013 */ +/* Generated by re2c 0.13.5 */ #line 1 "ext/standard/url_scanner_ex.re" /* +----------------------------------------------------------------------+ @@ -764,147 +764,120 @@ state_val: { 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; + if (yych <= '\n') goto yy65; goto yy63; } else { - if (yych <= '\r') goto yy64; + if (yych <= '\r') goto yy65; if (yych <= 0x1F) goto yy63; - goto yy64; + goto yy65; } } else { if (yych <= '&') { if (yych != '"') goto yy63; } else { if (yych <= '\'') goto yy62; - if (yych == '>') goto yy64; + if (yych == '>') goto yy65; goto yy63; } } yych = *(YYMARKER = ++YYCURSOR); - goto yy77; + if (yych != '>') goto yy74; yy61: -#line 346 "ext/standard/url_scanner_ex.re" - { handle_val(STD_ARGS, 0, ' '); goto state_next_arg_begin; } +#line 347 "ext/standard/url_scanner_ex.re" + { passthru(STD_ARGS); goto state_next_arg_begin; } #line 827 "ext/standard/url_scanner_ex.c" yy62: yych = *(YYMARKER = ++YYCURSOR); + if (yych == '>') goto yy61; goto yy69; yy63: - yych = *++YYCURSOR; + ++YYCURSOR; + 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 346 "ext/standard/url_scanner_ex.re" + { handle_val(STD_ARGS, 0, ' '); goto state_next_arg_begin; } +#line 839 "ext/standard/url_scanner_ex.c" +yy65: + yych = *++YYCURSOR; + goto yy61; yy66: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy67: - if (yybm[0+yych] & 8) { + if (yybm[0+yych] & 32) { goto yy66; } - goto yy61; + goto yy64; yy68: - YYMARKER = ++YYCURSOR; - if ((YYLIMIT - YYCURSOR) < 2) YYFILL(2); + ++YYCURSOR; + if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy69: - if (yybm[0+yych] & 16) { + if (yybm[0+yych] & 64) { goto yy68; } - if (yych <= '&') goto yy72; - if (yych >= '(') goto yy61; - ++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: + if (yych <= '=') goto yy71; +yy70: 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 (yych <= '!') goto yy80; - if (yych >= '#') goto yy61; +yy71: ++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: +#line 345 "ext/standard/url_scanner_ex.re" + { handle_val(STD_ARGS, 1, '\''); goto state_next_arg_begin; } +#line 868 "ext/standard/url_scanner_ex.c" +yy73: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; +yy74: if (yybm[0+yych] & 128) { - goto yy80; + goto yy73; } - if (yych >= '>') goto yy74; + if (yych >= '>') goto yy70; ++YYCURSOR; - yych = *YYCURSOR; - goto yy79; +#line 344 "ext/standard/url_scanner_ex.re" + { 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" diff --git a/ext/standard/url_scanner_ex.re b/ext/standard/url_scanner_ex.re index 760f725e983..f0dee8ebc1c 100644 --- a/ext/standard/url_scanner_ex.re +++ b/ext/standard/url_scanner_ex.re @@ -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; } */ From 31edf4df56a82d92631e25e7dd7c2bf6c8e00b99 Mon Sep 17 00:00:00 2001 From: Arpad Ray Date: Wed, 17 Jul 2013 16:28:01 +0100 Subject: [PATCH 2/2] regenerate url scanner --- ext/standard/url_scanner_ex.c | 243 ++++++++++++++++++---------------- 1 file changed, 128 insertions(+), 115 deletions(-) diff --git a/ext/standard/url_scanner_ex.c b/ext/standard/url_scanner_ex.c index 236276a648a..833e9d86cea 100644 --- a/ext/standard/url_scanner_ex.c +++ b/ext/standard/url_scanner_ex.c @@ -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,7 +773,7 @@ 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[] = { @@ -801,83 +814,83 @@ state_val: yych = *YYCURSOR; if (yych <= ' ') { if (yych <= '\f') { - if (yych <= 0x08) goto yy63; - if (yych <= '\n') goto yy65; - goto yy63; - } else { - if (yych <= '\r') goto yy65; - if (yych <= 0x1F) goto yy63; + if (yych <= 0x08) goto yy65; + if (yych <= '\n') goto yy67; goto yy65; + } else { + 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 yy65; - goto yy63; + if (yych <= '\'') goto yy64; + if (yych == '>') goto yy67; + goto yy65; } } yych = *(YYMARKER = ++YYCURSOR); - if (yych != '>') goto yy74; -yy61: + if (yych != '>') goto yy76; +yy63: #line 347 "ext/standard/url_scanner_ex.re" { passthru(STD_ARGS); goto state_next_arg_begin; } -#line 827 "ext/standard/url_scanner_ex.c" -yy62: +#line 840 "ext/standard/url_scanner_ex.c" +yy64: yych = *(YYMARKER = ++YYCURSOR); - if (yych == '>') goto yy61; - goto yy69; -yy63: + if (yych == '>') goto yy63; + goto yy71; +yy65: ++YYCURSOR; yych = *YYCURSOR; - goto yy67; -yy64: + goto yy69; +yy66: #line 346 "ext/standard/url_scanner_ex.re" { handle_val(STD_ARGS, 0, ' '); goto state_next_arg_begin; } -#line 839 "ext/standard/url_scanner_ex.c" -yy65: - yych = *++YYCURSOR; - goto yy61; -yy66: - ++YYCURSOR; - if (YYLIMIT <= YYCURSOR) YYFILL(1); - yych = *YYCURSOR; +#line 852 "ext/standard/url_scanner_ex.c" yy67: - if (yybm[0+yych] & 32) { - goto yy66; - } - goto yy64; + yych = *++YYCURSOR; + goto yy63; yy68: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; yy69: - if (yybm[0+yych] & 64) { + if (yybm[0+yych] & 32) { goto yy68; } - if (yych <= '=') goto yy71; + goto yy66; yy70: - YYCURSOR = YYMARKER; - goto yy61; -yy71: - ++YYCURSOR; -#line 345 "ext/standard/url_scanner_ex.re" - { handle_val(STD_ARGS, 1, '\''); goto state_next_arg_begin; } -#line 868 "ext/standard/url_scanner_ex.c" -yy73: ++YYCURSOR; if (YYLIMIT <= YYCURSOR) YYFILL(1); yych = *YYCURSOR; -yy74: - if (yybm[0+yych] & 128) { - goto yy73; +yy71: + if (yybm[0+yych] & 64) { + goto yy70; } - if (yych >= '>') 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 881 "ext/standard/url_scanner_ex.c" +yy75: + ++YYCURSOR; + if (YYLIMIT <= YYCURSOR) YYFILL(1); + yych = *YYCURSOR; +yy76: + if (yybm[0+yych] & 128) { + goto yy75; + } + if (yych >= '>') goto yy72; ++YYCURSOR; #line 344 "ext/standard/url_scanner_ex.re" { handle_val(STD_ARGS, 1, '"'); goto state_next_arg_begin; } -#line 881 "ext/standard/url_scanner_ex.c" +#line 894 "ext/standard/url_scanner_ex.c" } #line 348 "ext/standard/url_scanner_ex.re"