Created
August 4, 2016 05:08
-
-
Save yohgaki/87e50ee4fa871232da92ba8c1c1bea6e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/ext/standard/tests/general_functions/url_rewriter.phpt b/ext/standard/tests/general_functions/url_rewriter.phpt | |
new file mode 100644 | |
index 0000000..ce91b27 | |
--- /dev/null | |
+++ b/ext/standard/tests/general_functions/url_rewriter.phpt | |
@@ -0,0 +1,139 @@ | |
+--TEST-- | |
+URL Rewriter tests | |
+--INI-- | |
+url_rewriter.tags="a=href,form=" | |
+session.use_only_cookies=0 | |
+session.use_trans_sid=1 | |
+session.use_strict_mode=0 | |
+--FILE-- | |
+<?php | |
+session_id('id'); | |
+ | |
+$_SERVER['HTTP_HOST'] = 'php.net'; | |
+session_start(); | |
+output_add_rewrite_var('a','b'); | |
+?> | |
+ | |
+<a></a> | |
+<a href=""></a> | |
+<a href="foo"></a> | |
+<a href="?foo"></a> | |
+<a href="/foo"></a> | |
+<a href="foo=bar"></a> | |
+<a href="foo.php#bar"></a> | |
+<a href="../foo.php#bar"></a> | |
+ | |
+<a href="//bad.net/foo"></a> | |
+<a href="//bad.net/?foo"></a> | |
+<a href="//bad.net/foo"></a> | |
+<a href="//bad.net/foo=bar"></a> | |
+<a href="//bad.net/foo.php#bar"></a> | |
+<a href="//bad.net/../foo.php#bar"></a> | |
+ | |
+<a href="//php.net/foo"></a> | |
+<a href="//php.net/?foo"></a> | |
+<a href="//php.net//foo"></a> | |
+<a href="//php.net/foo=bar"></a> | |
+<a href="//php.net/foo.php#bar"></a> | |
+ | |
+<a href="http://bad.net/foo"></a> | |
+<a href="http://bad.net/?foo"></a> | |
+<a href="http://bad.net/foo"></a> | |
+<a href="http://bad.net/foo=bar"></a> | |
+<a href="http://bad.net/foo.php#bar"></a> | |
+<a href="http://bad.net/../foo.php#bar"></a> | |
+ | |
+<a href="http://php.net/foo"></a> | |
+<a href="http://php.net/?foo"></a> | |
+<a href="http://php.net//foo"></a> | |
+<a href="http://php.net/foo=bar"></a> | |
+<a href="http://php.net/foo.php#bar"></a> | |
+<a href="http://php.net/../foo.php#bar"></a> | |
+ | |
+<a href="bad://bad.net/foo"></a> | |
+<a href="bad://bad.net/?foo"></a> | |
+<a href="bad://bad.net/foo"></a> | |
+<a href="bad://bad.net/foo=bar"></a> | |
+<a href="bad://bad.net/foo.php#bar"></a> | |
+<a href="bad://bad.net/../foo.php#bar"></a> | |
+ | |
+<a href="bad://php.net/foo"></a> | |
+<a href="bad://php.net/?foo"></a> | |
+<a href="bad://php.net//foo"></a> | |
+<a href="bad://php.net/foo=bar"></a> | |
+<a href="bad://php.net/foo.php#bar"></a> | |
+<a href="bad://php.net/../foo.php#bar"></a> | |
+ | |
+<form></form> | |
+<form action=""></form> | |
+<form action="foo.php"></form> | |
+<form action="//php.net/foo.php"></form> | |
+<form action="http://php.net/foo.php"></form> | |
+ | |
+<form action="bad://php.net/foo.php"></form> | |
+<form action="//bad.net/foo.php"></form> | |
+<form action="http://php.net/foo.php"></form> | |
+<form action="bad://php.net/foo.php"></form> | |
+<form action="//bad.net/foo.php"></form> | |
+--EXPECT-- | |
+<a></a> | |
+<a href="?PHPSESSID=id&a=b"></a> | |
+<a href="foo?PHPSESSID=id&a=b"></a> | |
+<a href="?foo&PHPSESSID=id&a=b"></a> | |
+<a href="/foo?PHPSESSID=id&a=b"></a> | |
+<a href="foo=bar?PHPSESSID=id&a=b"></a> | |
+<a href="foo.php?PHPSESSID=id&a=b#bar"></a> | |
+<a href="../foo.php?PHPSESSID=id&a=b#bar"></a> | |
+ | |
+<a href="//bad.net/foo"></a> | |
+<a href="//bad.net/?foo"></a> | |
+<a href="//bad.net/foo"></a> | |
+<a href="//bad.net/foo=bar"></a> | |
+<a href="//bad.net/foo.php#bar"></a> | |
+<a href="//bad.net/../foo.php#bar"></a> | |
+ | |
+<a href="//php.net/foo?PHPSESSID=id&a=b"></a> | |
+<a href="//php.net/?foo&PHPSESSID=id&a=b"></a> | |
+<a href="//php.net//foo?PHPSESSID=id&a=b"></a> | |
+<a href="//php.net/foo=bar?PHPSESSID=id&a=b"></a> | |
+<a href="//php.net/foo.php?PHPSESSID=id&a=b#bar"></a> | |
+ | |
+<a href="http://bad.net/foo"></a> | |
+<a href="http://bad.net/?foo"></a> | |
+<a href="http://bad.net/foo"></a> | |
+<a href="http://bad.net/foo=bar"></a> | |
+<a href="http://bad.net/foo.php#bar"></a> | |
+<a href="http://bad.net/../foo.php#bar"></a> | |
+ | |
+<a href="http://php.net/foo"></a> | |
+<a href="http://php.net/?foo"></a> | |
+<a href="http://php.net//foo"></a> | |
+<a href="http://php.net/foo=bar"></a> | |
+<a href="http://php.net/foo.php#bar"></a> | |
+<a href="http://php.net/../foo.php#bar"></a> | |
+ | |
+<a href="bad://bad.net/foo"></a> | |
+<a href="bad://bad.net/?foo"></a> | |
+<a href="bad://bad.net/foo"></a> | |
+<a href="bad://bad.net/foo=bar"></a> | |
+<a href="bad://bad.net/foo.php#bar"></a> | |
+<a href="bad://bad.net/../foo.php#bar"></a> | |
+ | |
+<a href="bad://php.net/foo"></a> | |
+<a href="bad://php.net/?foo"></a> | |
+<a href="bad://php.net//foo"></a> | |
+<a href="bad://php.net/foo=bar"></a> | |
+<a href="bad://php.net/foo.php#bar"></a> | |
+<a href="bad://php.net/../foo.php#bar"></a> | |
+ | |
+<form><input type="hidden" name="PHPSESSID" value="id" /><input type="hidden" name="a" value="b" /></form> | |
+<form action=""><input type="hidden" name="PHPSESSID" value="id" /><input type="hidden" name="a" value="b" /></form> | |
+<form action="foo.php"><input type="hidden" name="PHPSESSID" value="id" /><input type="hidden" name="a" value="b" /></form> | |
+<form action="//php.net/foo.php"><input type="hidden" name="PHPSESSID" value="id" /><input type="hidden" name="a" value="b" /></form> | |
+<form action="http://php.net/foo.php"><input type="hidden" name="PHPSESSID" value="id" /><input type="hidden" name="a" value="b" /></form> | |
+ | |
+<form action="bad://php.net/foo.php"><input type="hidden" name="PHPSESSID" value="id" /><input type="hidden" name="a" value="b" /></form> | |
+<form action="//bad.net/foo.php"><input type="hidden" name="PHPSESSID" value="id" /><input type="hidden" name="a" value="b" /></form> | |
+<form action="http://php.net/foo.php"><input type="hidden" name="PHPSESSID" value="id" /><input type="hidden" name="a" value="b" /></form> | |
+<form action="bad://php.net/foo.php"><input type="hidden" name="PHPSESSID" value="id" /><input type="hidden" name="a" value="b" /></form> | |
+<form action="//bad.net/foo.php"><input type="hidden" name="PHPSESSID" value="id" /><input type="hidden" name="a" value="b" /></form> | |
diff --git a/ext/standard/url_scanner_ex.c b/ext/standard/url_scanner_ex.c | |
index 07ebbe0..5db9c6d 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 */ | |
+/* Generated by re2c 0.14.3 */ | |
#line 1 "ext/standard/url_scanner_ex.re" | |
/* | |
+----------------------------------------------------------------------+ | |
@@ -115,11 +115,37 @@ static inline void append_modified_url(smart_str *url, smart_str *dest, smart_st | |
const char *bash = NULL; | |
const char *sep = "?"; | |
+ /* | |
+ * Don't modify "//example.com" full path, unless | |
+ * HTTP_HOST matches. | |
+ */ | |
+ if (ZSTR_VAL(url->s)[0] == '/' && ZSTR_VAL(url->s)[1] == '/') { | |
+ zval *tmp = NULL, *http_host = NULL; | |
+ size_t target_len, host_len; | |
+ if ((!(tmp = zend_hash_str_find(&EG(symbol_table), ZEND_STRL("_SERVER")))) | |
+ || Z_TYPE_P(tmp) != IS_ARRAY | |
+ || !(http_host = zend_hash_str_find(HASH_OF(tmp), ZEND_STRL("HTTP_HOST"))) | |
+ || Z_TYPE_P(http_host) != IS_STRING) { | |
+ smart_str_append_smart_str(dest, url); | |
+ return; | |
+ } | |
+ /* HTTP_HOST could be "example.com:8888", etc. */ | |
+ /* Need to find end of URL in buffer */ | |
+ host_len = strcspn(Z_STRVAL_P(http_host), ":"); | |
+ target_len = strcspn(ZSTR_VAL(url->s)+2, "/\"'?>\r\n"); | |
+ if (host_len | |
+ && host_len == target_len | |
+ && strncasecmp(Z_STRVAL_P(http_host), ZSTR_VAL(url->s)+2, host_len)) { | |
+ smart_str_append_smart_str(dest, url); | |
+ return; | |
+ } | |
+ } | |
+ | |
q = (p = ZSTR_VAL(url->s)) + ZSTR_LEN(url->s); | |
scan: | |
-#line 123 "ext/standard/url_scanner_ex.c" | |
+#line 149 "ext/standard/url_scanner_ex.c" | |
{ | |
YYCTYPE yych; | |
static const unsigned char yybm[] = { | |
@@ -162,22 +188,22 @@ scan: | |
if (yybm[0+yych] & 128) { | |
goto yy8; | |
} | |
- if (yych <= '9') goto yy6; | |
+ if (yych <= '#') goto yy6; | |
if (yych >= ';') goto yy4; | |
++YYCURSOR; | |
-#line 125 "ext/standard/url_scanner_ex.re" | |
+#line 151 "ext/standard/url_scanner_ex.re" | |
{ smart_str_append_smart_str(dest, url); return; } | |
-#line 171 "ext/standard/url_scanner_ex.c" | |
+#line 197 "ext/standard/url_scanner_ex.c" | |
yy4: | |
++YYCURSOR; | |
-#line 126 "ext/standard/url_scanner_ex.re" | |
+#line 152 "ext/standard/url_scanner_ex.re" | |
{ sep = separator; goto scan; } | |
-#line 176 "ext/standard/url_scanner_ex.c" | |
+#line 202 "ext/standard/url_scanner_ex.c" | |
yy6: | |
++YYCURSOR; | |
-#line 127 "ext/standard/url_scanner_ex.re" | |
+#line 153 "ext/standard/url_scanner_ex.re" | |
{ bash = p - 1; goto done; } | |
-#line 181 "ext/standard/url_scanner_ex.c" | |
+#line 207 "ext/standard/url_scanner_ex.c" | |
yy8: | |
++YYCURSOR; | |
if (YYLIMIT <= YYCURSOR) YYFILL(1); | |
@@ -185,11 +211,11 @@ yy8: | |
if (yybm[0+yych] & 128) { | |
goto yy8; | |
} | |
-#line 128 "ext/standard/url_scanner_ex.re" | |
+#line 154 "ext/standard/url_scanner_ex.re" | |
{ goto scan; } | |
-#line 191 "ext/standard/url_scanner_ex.c" | |
+#line 217 "ext/standard/url_scanner_ex.c" | |
} | |
-#line 129 "ext/standard/url_scanner_ex.re" | |
+#line 155 "ext/standard/url_scanner_ex.re" | |
done: | |
@@ -374,7 +400,7 @@ state_plain_begin: | |
state_plain: | |
start = YYCURSOR; | |
-#line 378 "ext/standard/url_scanner_ex.c" | |
+#line 404 "ext/standard/url_scanner_ex.c" | |
{ | |
YYCTYPE yych; | |
static const unsigned char yybm[] = { | |
@@ -417,9 +443,9 @@ state_plain: | |
goto yy15; | |
} | |
++YYCURSOR; | |
-#line 313 "ext/standard/url_scanner_ex.re" | |
+#line 339 "ext/standard/url_scanner_ex.re" | |
{ passthru(STD_ARGS); STATE = STATE_TAG; goto state_tag; } | |
-#line 423 "ext/standard/url_scanner_ex.c" | |
+#line 449 "ext/standard/url_scanner_ex.c" | |
yy15: | |
++YYCURSOR; | |
if (YYLIMIT <= YYCURSOR) YYFILL(1); | |
@@ -427,17 +453,17 @@ yy15: | |
if (yybm[0+yych] & 128) { | |
goto yy15; | |
} | |
-#line 314 "ext/standard/url_scanner_ex.re" | |
+#line 340 "ext/standard/url_scanner_ex.re" | |
{ passthru(STD_ARGS); goto state_plain; } | |
-#line 433 "ext/standard/url_scanner_ex.c" | |
+#line 459 "ext/standard/url_scanner_ex.c" | |
} | |
-#line 315 "ext/standard/url_scanner_ex.re" | |
+#line 341 "ext/standard/url_scanner_ex.re" | |
state_tag: | |
start = YYCURSOR; | |
-#line 441 "ext/standard/url_scanner_ex.c" | |
+#line 467 "ext/standard/url_scanner_ex.c" | |
{ | |
YYCTYPE yych; | |
static const unsigned char yybm[] = { | |
@@ -488,14 +514,14 @@ yy20: | |
yych = *YYCURSOR; | |
goto yy25; | |
yy21: | |
-#line 320 "ext/standard/url_scanner_ex.re" | |
+#line 346 "ext/standard/url_scanner_ex.re" | |
{ handle_tag(STD_ARGS); /* Sets STATE */; passthru(STD_ARGS); if (STATE == STATE_PLAIN) goto state_plain; else goto state_next_arg; } | |
-#line 494 "ext/standard/url_scanner_ex.c" | |
+#line 520 "ext/standard/url_scanner_ex.c" | |
yy22: | |
++YYCURSOR; | |
-#line 321 "ext/standard/url_scanner_ex.re" | |
+#line 347 "ext/standard/url_scanner_ex.re" | |
{ passthru(STD_ARGS); goto state_plain_begin; } | |
-#line 499 "ext/standard/url_scanner_ex.c" | |
+#line 525 "ext/standard/url_scanner_ex.c" | |
yy24: | |
++YYCURSOR; | |
if (YYLIMIT <= YYCURSOR) YYFILL(1); | |
@@ -506,7 +532,7 @@ yy25: | |
} | |
goto yy21; | |
} | |
-#line 322 "ext/standard/url_scanner_ex.re" | |
+#line 348 "ext/standard/url_scanner_ex.re" | |
state_next_arg_begin: | |
@@ -515,7 +541,7 @@ state_next_arg_begin: | |
state_next_arg: | |
start = YYCURSOR; | |
-#line 519 "ext/standard/url_scanner_ex.c" | |
+#line 545 "ext/standard/url_scanner_ex.c" | |
{ | |
YYCTYPE yych; | |
static const unsigned char yybm[] = { | |
@@ -580,28 +606,28 @@ yy28: | |
++YYCURSOR; | |
if ((yych = *YYCURSOR) == '>') goto yy39; | |
yy29: | |
-#line 333 "ext/standard/url_scanner_ex.re" | |
+#line 359 "ext/standard/url_scanner_ex.re" | |
{ passthru(STD_ARGS); goto state_plain_begin; } | |
-#line 586 "ext/standard/url_scanner_ex.c" | |
+#line 612 "ext/standard/url_scanner_ex.c" | |
yy30: | |
++YYCURSOR; | |
yy31: | |
-#line 330 "ext/standard/url_scanner_ex.re" | |
+#line 356 "ext/standard/url_scanner_ex.re" | |
{ passthru(STD_ARGS); handle_form(STD_ARGS); goto state_plain_begin; } | |
-#line 592 "ext/standard/url_scanner_ex.c" | |
+#line 618 "ext/standard/url_scanner_ex.c" | |
yy32: | |
++YYCURSOR; | |
yych = *YYCURSOR; | |
goto yy38; | |
yy33: | |
-#line 331 "ext/standard/url_scanner_ex.re" | |
+#line 357 "ext/standard/url_scanner_ex.re" | |
{ passthru(STD_ARGS); goto state_next_arg; } | |
-#line 600 "ext/standard/url_scanner_ex.c" | |
+#line 626 "ext/standard/url_scanner_ex.c" | |
yy34: | |
++YYCURSOR; | |
-#line 332 "ext/standard/url_scanner_ex.re" | |
+#line 358 "ext/standard/url_scanner_ex.re" | |
{ --YYCURSOR; STATE = STATE_ARG; goto state_arg; } | |
-#line 605 "ext/standard/url_scanner_ex.c" | |
+#line 631 "ext/standard/url_scanner_ex.c" | |
yy36: | |
yych = *++YYCURSOR; | |
goto yy29; | |
@@ -619,13 +645,13 @@ yy39: | |
yych = *YYCURSOR; | |
goto yy31; | |
} | |
-#line 334 "ext/standard/url_scanner_ex.re" | |
+#line 360 "ext/standard/url_scanner_ex.re" | |
state_arg: | |
start = YYCURSOR; | |
-#line 629 "ext/standard/url_scanner_ex.c" | |
+#line 655 "ext/standard/url_scanner_ex.c" | |
{ | |
YYCTYPE yych; | |
static const unsigned char yybm[] = { | |
@@ -673,14 +699,14 @@ yy42: | |
yych = *YYCURSOR; | |
goto yy47; | |
yy43: | |
-#line 339 "ext/standard/url_scanner_ex.re" | |
+#line 365 "ext/standard/url_scanner_ex.re" | |
{ passthru(STD_ARGS); handle_arg(STD_ARGS); STATE = STATE_BEFORE_VAL; goto state_before_val; } | |
-#line 679 "ext/standard/url_scanner_ex.c" | |
+#line 705 "ext/standard/url_scanner_ex.c" | |
yy44: | |
++YYCURSOR; | |
-#line 340 "ext/standard/url_scanner_ex.re" | |
+#line 366 "ext/standard/url_scanner_ex.re" | |
{ passthru(STD_ARGS); STATE = STATE_NEXT_ARG; goto state_next_arg; } | |
-#line 684 "ext/standard/url_scanner_ex.c" | |
+#line 710 "ext/standard/url_scanner_ex.c" | |
yy46: | |
++YYCURSOR; | |
if (YYLIMIT <= YYCURSOR) YYFILL(1); | |
@@ -691,13 +717,13 @@ yy47: | |
} | |
goto yy43; | |
} | |
-#line 341 "ext/standard/url_scanner_ex.re" | |
+#line 367 "ext/standard/url_scanner_ex.re" | |
state_before_val: | |
start = YYCURSOR; | |
-#line 701 "ext/standard/url_scanner_ex.c" | |
+#line 727 "ext/standard/url_scanner_ex.c" | |
{ | |
YYCTYPE yych; | |
static const unsigned char yybm[] = { | |
@@ -744,17 +770,17 @@ yy50: | |
if (yych == ' ') goto yy57; | |
if (yych == '=') goto yy55; | |
yy51: | |
-#line 347 "ext/standard/url_scanner_ex.re" | |
+#line 373 "ext/standard/url_scanner_ex.re" | |
{ --YYCURSOR; goto state_next_arg_begin; } | |
-#line 750 "ext/standard/url_scanner_ex.c" | |
+#line 776 "ext/standard/url_scanner_ex.c" | |
yy52: | |
++YYCURSOR; | |
yych = *YYCURSOR; | |
goto yy56; | |
yy53: | |
-#line 346 "ext/standard/url_scanner_ex.re" | |
+#line 372 "ext/standard/url_scanner_ex.re" | |
{ passthru(STD_ARGS); STATE = STATE_VAL; goto state_val; } | |
-#line 758 "ext/standard/url_scanner_ex.c" | |
+#line 784 "ext/standard/url_scanner_ex.c" | |
yy54: | |
yych = *++YYCURSOR; | |
goto yy51; | |
@@ -776,14 +802,14 @@ yy57: | |
YYCURSOR = YYMARKER; | |
goto yy51; | |
} | |
-#line 348 "ext/standard/url_scanner_ex.re" | |
+#line 374 "ext/standard/url_scanner_ex.re" | |
state_val: | |
start = YYCURSOR; | |
-#line 787 "ext/standard/url_scanner_ex.c" | |
+#line 813 "ext/standard/url_scanner_ex.c" | |
{ | |
YYCTYPE yych; | |
static const unsigned char yybm[] = { | |
@@ -844,9 +870,9 @@ state_val: | |
yych = *(YYMARKER = ++YYCURSOR); | |
if (yych != '>') goto yy76; | |
yy63: | |
-#line 357 "ext/standard/url_scanner_ex.re" | |
+#line 383 "ext/standard/url_scanner_ex.re" | |
{ passthru(STD_ARGS); goto state_next_arg_begin; } | |
-#line 850 "ext/standard/url_scanner_ex.c" | |
+#line 876 "ext/standard/url_scanner_ex.c" | |
yy64: | |
yych = *(YYMARKER = ++YYCURSOR); | |
if (yych == '>') goto yy63; | |
@@ -856,9 +882,9 @@ yy65: | |
yych = *YYCURSOR; | |
goto yy69; | |
yy66: | |
-#line 356 "ext/standard/url_scanner_ex.re" | |
+#line 382 "ext/standard/url_scanner_ex.re" | |
{ handle_val(STD_ARGS, 0, ' '); goto state_next_arg_begin; } | |
-#line 862 "ext/standard/url_scanner_ex.c" | |
+#line 888 "ext/standard/url_scanner_ex.c" | |
yy67: | |
yych = *++YYCURSOR; | |
goto yy63; | |
@@ -879,15 +905,15 @@ yy71: | |
if (yybm[0+yych] & 64) { | |
goto yy70; | |
} | |
- if (yych <= '=') goto yy73; | |
+ if (yych <= '\'') goto yy73; | |
yy72: | |
YYCURSOR = YYMARKER; | |
goto yy63; | |
yy73: | |
++YYCURSOR; | |
-#line 355 "ext/standard/url_scanner_ex.re" | |
+#line 381 "ext/standard/url_scanner_ex.re" | |
{ handle_val(STD_ARGS, 1, '\''); goto state_next_arg_begin; } | |
-#line 891 "ext/standard/url_scanner_ex.c" | |
+#line 917 "ext/standard/url_scanner_ex.c" | |
yy75: | |
++YYCURSOR; | |
if (YYLIMIT <= YYCURSOR) YYFILL(1); | |
@@ -896,13 +922,13 @@ yy76: | |
if (yybm[0+yych] & 128) { | |
goto yy75; | |
} | |
- if (yych >= '>') goto yy72; | |
+ if (yych >= '#') goto yy72; | |
++YYCURSOR; | |
-#line 354 "ext/standard/url_scanner_ex.re" | |
+#line 380 "ext/standard/url_scanner_ex.re" | |
{ handle_val(STD_ARGS, 1, '"'); goto state_next_arg_begin; } | |
-#line 904 "ext/standard/url_scanner_ex.c" | |
+#line 930 "ext/standard/url_scanner_ex.c" | |
} | |
-#line 358 "ext/standard/url_scanner_ex.re" | |
+#line 384 "ext/standard/url_scanner_ex.re" | |
stop: | |
diff --git a/ext/standard/url_scanner_ex.re b/ext/standard/url_scanner_ex.re | |
index 9eb0952..945f547 100644 | |
--- a/ext/standard/url_scanner_ex.re | |
+++ b/ext/standard/url_scanner_ex.re | |
@@ -118,6 +118,32 @@ static inline void append_modified_url(smart_str *url, smart_str *dest, smart_st | |
const char *bash = NULL; | |
const char *sep = "?"; | |
+ /* | |
+ * Don't modify "//example.com" full path, unless | |
+ * HTTP_HOST matches. | |
+ */ | |
+ if (ZSTR_VAL(url->s)[0] == '/' && ZSTR_VAL(url->s)[1] == '/') { | |
+ zval *tmp = NULL, *http_host = NULL; | |
+ size_t target_len, host_len; | |
+ if ((!(tmp = zend_hash_str_find(&EG(symbol_table), ZEND_STRL("_SERVER")))) | |
+ || Z_TYPE_P(tmp) != IS_ARRAY | |
+ || !(http_host = zend_hash_str_find(HASH_OF(tmp), ZEND_STRL("HTTP_HOST"))) | |
+ || Z_TYPE_P(http_host) != IS_STRING) { | |
+ smart_str_append_smart_str(dest, url); | |
+ return; | |
+ } | |
+ /* HTTP_HOST could be "example.com:8888", etc. */ | |
+ /* Need to find end of URL in buffer */ | |
+ host_len = strcspn(Z_STRVAL_P(http_host), ":"); | |
+ target_len = strcspn(ZSTR_VAL(url->s)+2, "/\"'?>\r\n"); | |
+ if (host_len | |
+ && host_len == target_len | |
+ && strncasecmp(Z_STRVAL_P(http_host), ZSTR_VAL(url->s)+2, host_len)) { | |
+ smart_str_append_smart_str(dest, url); | |
+ return; | |
+ } | |
+ } | |
+ | |
q = (p = ZSTR_VAL(url->s)) + ZSTR_LEN(url->s); | |
scan: | |
diff --git a/sapi/phpdbg/phpdbg_parser.c b/sapi/phpdbg/phpdbg_parser.c | |
index c5222a0..88aba8f 100644 | |
--- a/sapi/phpdbg/phpdbg_parser.c | |
+++ b/sapi/phpdbg/phpdbg_parser.c | |
@@ -1,8 +1,8 @@ | |
-/* A Bison parser, made by GNU Bison 2.7.12-4996. */ | |
+/* A Bison parser, made by GNU Bison 2.6.4. */ | |
/* Bison implementation for Yacc-like parsers in C | |
- Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. | |
+ Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. | |
This program is free software: you can redistribute it and/or modify | |
it under the terms of the GNU General Public License as published by | |
@@ -44,7 +44,7 @@ | |
#define YYBISON 1 | |
/* Bison version. */ | |
-#define YYBISON_VERSION "2.7.12-4996" | |
+#define YYBISON_VERSION "2.6.4" | |
/* Skeleton name. */ | |
#define YYSKELETON_NAME "yacc.c" | |
@@ -69,8 +69,8 @@ | |
#define yynerrs phpdbg_nerrs | |
/* Copy the first part of user declarations. */ | |
-/* Line 371 of yacc.c */ | |
-#line 1 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 358 of yacc.c */ | |
+#line 1 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
/* | |
@@ -102,7 +102,7 @@ ZEND_EXTERN_MODULE_GLOBALS(phpdbg) | |
#endif | |
-/* Line 371 of yacc.c */ | |
+/* Line 358 of yacc.c */ | |
#line 107 "sapi/phpdbg/phpdbg_parser.c" | |
# ifndef YY_NULL | |
@@ -133,8 +133,8 @@ ZEND_EXTERN_MODULE_GLOBALS(phpdbg) | |
extern int phpdbg_debug; | |
#endif | |
/* "%code requires" blocks. */ | |
-/* Line 387 of yacc.c */ | |
-#line 36 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 374 of yacc.c */ | |
+#line 36 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
#include "phpdbg.h" | |
#ifndef YY_TYPEDEF_YY_SCANNER_T | |
@@ -143,7 +143,7 @@ typedef void* yyscan_t; | |
#endif | |
-/* Line 387 of yacc.c */ | |
+/* Line 374 of yacc.c */ | |
#line 148 "sapi/phpdbg/phpdbg_parser.c" | |
/* Tokens. */ | |
@@ -174,28 +174,6 @@ typedef void* yyscan_t; | |
T_REQ_ID = 277 | |
}; | |
#endif | |
-/* Tokens. */ | |
-#define T_EVAL 258 | |
-#define T_RUN 259 | |
-#define T_SHELL 260 | |
-#define T_IF 261 | |
-#define T_TRUTHY 262 | |
-#define T_FALSY 263 | |
-#define T_STRING 264 | |
-#define T_COLON 265 | |
-#define T_DCOLON 266 | |
-#define T_POUND 267 | |
-#define T_SEPARATOR 268 | |
-#define T_PROTO 269 | |
-#define T_DIGITS 270 | |
-#define T_LITERAL 271 | |
-#define T_ADDR 272 | |
-#define T_OPCODE 273 | |
-#define T_ID 274 | |
-#define T_INPUT 275 | |
-#define T_UNEXPECTED 276 | |
-#define T_REQ_ID 277 | |
- | |
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED | |
@@ -224,8 +202,8 @@ int phpdbg_parse (); | |
/* Copy the second part of user declarations. */ | |
-/* Line 390 of yacc.c */ | |
-#line 229 "sapi/phpdbg/phpdbg_parser.c" | |
+/* Line 377 of yacc.c */ | |
+#line 207 "sapi/phpdbg/phpdbg_parser.c" | |
#ifdef short | |
# undef short | |
@@ -286,14 +264,6 @@ typedef short int yytype_int16; | |
# endif | |
#endif | |
-#ifndef __attribute__ | |
-/* This feature is available in gcc versions 2.5 and later. */ | |
-# if (! defined __GNUC__ || __GNUC__ < 2 \ | |
- || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)) | |
-# define __attribute__(Spec) /* empty */ | |
-# endif | |
-#endif | |
- | |
/* Suppress unused-variable warnings by "using" E. */ | |
#if ! defined lint || defined __GNUC__ | |
# define YYUSE(E) ((void) (E)) | |
@@ -301,7 +271,6 @@ typedef short int yytype_int16; | |
# define YYUSE(E) /* empty */ | |
#endif | |
- | |
/* Identity function, used to suppress warnings about constant conditions. */ | |
#ifndef lint | |
# define YYID(N) (N) | |
@@ -710,18 +679,47 @@ do \ | |
} \ | |
while (YYID (0)) | |
-/* Error token number */ | |
+ | |
#define YYTERROR 1 | |
#define YYERRCODE 256 | |
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. | |
+ If N is 0, then set CURRENT to the empty location which ends | |
+ the previous symbol: RHS[0] (always defined). */ | |
+ | |
+#ifndef YYLLOC_DEFAULT | |
+# define YYLLOC_DEFAULT(Current, Rhs, N) \ | |
+ do \ | |
+ if (YYID (N)) \ | |
+ { \ | |
+ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ | |
+ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ | |
+ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ | |
+ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ | |
+ } \ | |
+ else \ | |
+ { \ | |
+ (Current).first_line = (Current).last_line = \ | |
+ YYRHSLOC (Rhs, 0).last_line; \ | |
+ (Current).first_column = (Current).last_column = \ | |
+ YYRHSLOC (Rhs, 0).last_column; \ | |
+ } \ | |
+ while (YYID (0)) | |
+#endif | |
+ | |
+#define YYRHSLOC(Rhs, K) ((Rhs)[K]) | |
+ | |
+ | |
/* This macro is provided for backward compatibility. */ | |
+ | |
#ifndef YY_LOCATION_PRINT | |
# define YY_LOCATION_PRINT(File, Loc) ((void) 0) | |
#endif | |
/* YYLEX -- calling `yylex' with the right arguments. */ | |
+ | |
#ifdef YYLEX_PARAM | |
# define YYLEX yylex (&yylval, YYLEX_PARAM) | |
#else | |
@@ -781,7 +779,11 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep) | |
# else | |
YYUSE (yyoutput); | |
# endif | |
- YYUSE (yytype); | |
+ switch (yytype) | |
+ { | |
+ default: | |
+ break; | |
+ } | |
} | |
@@ -1022,6 +1024,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, | |
{ | |
YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]); | |
YYSIZE_T yysize = yysize0; | |
+ YYSIZE_T yysize1; | |
enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; | |
/* Internationalized format string. */ | |
const char *yyformat = YY_NULL; | |
@@ -1084,13 +1087,11 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, | |
break; | |
} | |
yyarg[yycount++] = yytname[yyx]; | |
- { | |
- YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]); | |
- if (! (yysize <= yysize1 | |
- && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) | |
- return 2; | |
- yysize = yysize1; | |
- } | |
+ yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]); | |
+ if (! (yysize <= yysize1 | |
+ && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) | |
+ return 2; | |
+ yysize = yysize1; | |
} | |
} | |
} | |
@@ -1110,12 +1111,10 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, | |
# undef YYCASE_ | |
} | |
- { | |
- YYSIZE_T yysize1 = yysize + yystrlen (yyformat); | |
- if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) | |
- return 2; | |
- yysize = yysize1; | |
- } | |
+ yysize1 = yysize + yystrlen (yyformat); | |
+ if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) | |
+ return 2; | |
+ yysize = yysize1; | |
if (*yymsg_alloc < yysize) | |
{ | |
@@ -1171,7 +1170,12 @@ yydestruct (yymsg, yytype, yyvaluep) | |
yymsg = "Deleting"; | |
YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); | |
- YYUSE (yytype); | |
+ switch (yytype) | |
+ { | |
+ | |
+ default: | |
+ break; | |
+ } | |
} | |
@@ -1207,11 +1211,10 @@ yyparse () | |
int yychar; | |
-#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ | |
+#if defined __GNUC__ && (4 < __GNUC__ + (6 <= __GNUC_MINOR__)) | |
/* Suppress an incorrect diagnostic about yylval being uninitialized. */ | |
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ | |
_Pragma ("GCC diagnostic push") \ | |
- _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ | |
_Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") | |
# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ | |
_Pragma ("GCC diagnostic pop") | |
@@ -1219,18 +1222,18 @@ int yychar; | |
/* Default value used for initialization, for pacifying older GCCs | |
or non-GCC compilers. */ | |
static YYSTYPE yyval_default; | |
-# define YY_INITIAL_VALUE(Value) = Value | |
+# define YYLVAL_INITIALIZE() (yylval = yyval_default) | |
+#endif | |
+#ifndef YYLVAL_INITIALIZE | |
+# define YYLVAL_INITIALIZE() | |
#endif | |
#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN | |
# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN | |
# define YY_IGNORE_MAYBE_UNINITIALIZED_END | |
#endif | |
-#ifndef YY_INITIAL_VALUE | |
-# define YY_INITIAL_VALUE(Value) /* Nothing. */ | |
-#endif | |
/* The semantic value of the lookahead symbol. */ | |
-YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); | |
+YYSTYPE yylval; | |
/* Number of syntax errors so far. */ | |
int yynerrs; | |
@@ -1279,8 +1282,8 @@ YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); | |
Keep to zero when no symbol should be popped. */ | |
int yylen = 0; | |
- yyssp = yyss = yyssa; | |
- yyvsp = yyvs = yyvsa; | |
+ yyss = yyssa; | |
+ yyvs = yyvsa; | |
yystacksize = YYINITDEPTH; | |
YYDPRINTF ((stderr, "Starting parse\n")); | |
@@ -1289,6 +1292,15 @@ YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); | |
yyerrstatus = 0; | |
yynerrs = 0; | |
yychar = YYEMPTY; /* Cause a token to be read. */ | |
+ | |
+ /* Initialize stack pointers. | |
+ Waste one element of value and location stack | |
+ so that they stay on the same level as the state stack. | |
+ The wasted elements are never initialized. */ | |
+ yyssp = yyss; | |
+ yyvsp = yyvs; | |
+ | |
+ YYLVAL_INITIALIZE (); | |
goto yysetstate; | |
/*------------------------------------------------------------. | |
@@ -1468,50 +1480,50 @@ yyreduce: | |
switch (yyn) | |
{ | |
case 2: | |
-/* Line 1802 of yacc.c */ | |
-#line 71 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 1813 of yacc.c */ | |
+#line 71 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
{ (yyval) = (yyvsp[(1) - (1)]); } | |
break; | |
case 3: | |
-/* Line 1802 of yacc.c */ | |
-#line 72 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 1813 of yacc.c */ | |
+#line 72 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
{ phpdbg_stack_separate((yyvsp[(1) - (3)]).top); (yyval) = (yyvsp[(3) - (3)]); } | |
break; | |
case 5: | |
-/* Line 1802 of yacc.c */ | |
-#line 77 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 1813 of yacc.c */ | |
+#line 77 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
{ (yyval).top = PHPDBG_G(parser_stack)->top; } | |
break; | |
case 6: | |
-/* Line 1802 of yacc.c */ | |
-#line 78 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 1813 of yacc.c */ | |
+#line 78 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
{ phpdbg_stack_push(PHPDBG_G(parser_stack), &(yyvsp[(1) - (1)])); (yyval).top = PHPDBG_G(parser_stack)->top; } | |
break; | |
case 7: | |
-/* Line 1802 of yacc.c */ | |
-#line 82 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 1813 of yacc.c */ | |
+#line 82 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
{ phpdbg_stack_push(PHPDBG_G(parser_stack), &(yyvsp[(1) - (1)])); (yyval).top = PHPDBG_G(parser_stack)->top; } | |
break; | |
case 8: | |
-/* Line 1802 of yacc.c */ | |
-#line 83 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 1813 of yacc.c */ | |
+#line 83 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
{ phpdbg_stack_push(PHPDBG_G(parser_stack), &(yyvsp[(2) - (2)])); (yyval).top = PHPDBG_G(parser_stack)->top; } | |
break; | |
case 9: | |
-/* Line 1802 of yacc.c */ | |
-#line 84 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 1813 of yacc.c */ | |
+#line 84 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
{ (yyval) = (yyvsp[(1) - (2)]); } | |
break; | |
case 10: | |
-/* Line 1802 of yacc.c */ | |
-#line 88 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 1813 of yacc.c */ | |
+#line 88 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
{ | |
(yyval).type = FILE_PARAM; | |
(yyval).file.name = (yyvsp[(2) - (3)]).str; | |
@@ -1520,8 +1532,8 @@ yyreduce: | |
break; | |
case 11: | |
-/* Line 1802 of yacc.c */ | |
-#line 93 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 1813 of yacc.c */ | |
+#line 93 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
{ | |
(yyval).type = NUMERIC_FILE_PARAM; | |
(yyval).file.name = (yyvsp[(1) - (4)]).str; | |
@@ -1530,8 +1542,8 @@ yyreduce: | |
break; | |
case 12: | |
-/* Line 1802 of yacc.c */ | |
-#line 98 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 1813 of yacc.c */ | |
+#line 98 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
{ | |
(yyval).type = FILE_PARAM; | |
(yyval).file.name = malloc((yyvsp[(1) - (4)]).len + (yyvsp[(2) - (4)]).len + 1); | |
@@ -1545,8 +1557,8 @@ yyreduce: | |
break; | |
case 13: | |
-/* Line 1802 of yacc.c */ | |
-#line 108 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 1813 of yacc.c */ | |
+#line 108 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
{ | |
(yyval).type = NUMERIC_FILE_PARAM; | |
(yyval).file.name = malloc((yyvsp[(1) - (5)]).len + (yyvsp[(2) - (5)]).len + 1); | |
@@ -1560,8 +1572,8 @@ yyreduce: | |
break; | |
case 14: | |
-/* Line 1802 of yacc.c */ | |
-#line 118 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 1813 of yacc.c */ | |
+#line 118 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
{ | |
(yyval).type = METHOD_PARAM; | |
(yyval).method.class = (yyvsp[(1) - (3)]).str; | |
@@ -1570,8 +1582,8 @@ yyreduce: | |
break; | |
case 15: | |
-/* Line 1802 of yacc.c */ | |
-#line 123 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 1813 of yacc.c */ | |
+#line 123 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
{ | |
(yyval).type = NUMERIC_METHOD_PARAM; | |
(yyval).method.class = (yyvsp[(1) - (5)]).str; | |
@@ -1581,8 +1593,8 @@ yyreduce: | |
break; | |
case 16: | |
-/* Line 1802 of yacc.c */ | |
-#line 129 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 1813 of yacc.c */ | |
+#line 129 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
{ | |
(yyval).type = NUMERIC_FUNCTION_PARAM; | |
(yyval).str = (yyvsp[(1) - (3)]).str; | |
@@ -1592,8 +1604,8 @@ yyreduce: | |
break; | |
case 17: | |
-/* Line 1802 of yacc.c */ | |
-#line 135 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 1813 of yacc.c */ | |
+#line 135 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
{ | |
(yyval).type = COND_PARAM; | |
(yyval).str = (yyvsp[(2) - (2)]).str; | |
@@ -1602,56 +1614,56 @@ yyreduce: | |
break; | |
case 18: | |
-/* Line 1802 of yacc.c */ | |
-#line 140 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 1813 of yacc.c */ | |
+#line 140 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
{ (yyval) = (yyvsp[(1) - (1)]); } | |
break; | |
case 19: | |
-/* Line 1802 of yacc.c */ | |
-#line 141 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 1813 of yacc.c */ | |
+#line 141 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
{ (yyval) = (yyvsp[(1) - (1)]); } | |
break; | |
case 20: | |
-/* Line 1802 of yacc.c */ | |
-#line 142 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 1813 of yacc.c */ | |
+#line 142 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
{ (yyval) = (yyvsp[(1) - (1)]); } | |
break; | |
case 21: | |
-/* Line 1802 of yacc.c */ | |
-#line 143 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 1813 of yacc.c */ | |
+#line 143 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
{ (yyval) = (yyvsp[(1) - (1)]); } | |
break; | |
case 22: | |
-/* Line 1802 of yacc.c */ | |
-#line 144 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 1813 of yacc.c */ | |
+#line 144 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
{ (yyval) = (yyvsp[(1) - (1)]); } | |
break; | |
case 23: | |
-/* Line 1802 of yacc.c */ | |
-#line 145 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 1813 of yacc.c */ | |
+#line 145 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
{ (yyval) = (yyvsp[(1) - (1)]); } | |
break; | |
case 24: | |
-/* Line 1802 of yacc.c */ | |
-#line 146 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 1813 of yacc.c */ | |
+#line 146 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
{ (yyval) = (yyvsp[(1) - (1)]); } | |
break; | |
case 25: | |
-/* Line 1802 of yacc.c */ | |
-#line 150 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 1813 of yacc.c */ | |
+#line 150 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
{ PHPDBG_G(req_id) = (yyvsp[(1) - (1)]).num; } | |
break; | |
case 27: | |
-/* Line 1802 of yacc.c */ | |
-#line 155 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 1813 of yacc.c */ | |
+#line 155 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
{ | |
(yyval).type = EVAL_PARAM; | |
(yyval).str = (yyvsp[(3) - (3)]).str; | |
@@ -1660,8 +1672,8 @@ yyreduce: | |
break; | |
case 28: | |
-/* Line 1802 of yacc.c */ | |
-#line 160 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 1813 of yacc.c */ | |
+#line 160 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
{ | |
(yyval).type = SHELL_PARAM; | |
(yyval).str = (yyvsp[(3) - (3)]).str; | |
@@ -1670,8 +1682,8 @@ yyreduce: | |
break; | |
case 29: | |
-/* Line 1802 of yacc.c */ | |
-#line 165 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 1813 of yacc.c */ | |
+#line 165 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
{ | |
(yyval).type = RUN_PARAM; | |
(yyval).len = 0; | |
@@ -1679,8 +1691,8 @@ yyreduce: | |
break; | |
case 30: | |
-/* Line 1802 of yacc.c */ | |
-#line 169 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 1813 of yacc.c */ | |
+#line 169 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
{ | |
(yyval).type = RUN_PARAM; | |
(yyval).str = (yyvsp[(3) - (3)]).str; | |
@@ -1689,8 +1701,8 @@ yyreduce: | |
break; | |
-/* Line 1802 of yacc.c */ | |
-#line 1694 "sapi/phpdbg/phpdbg_parser.c" | |
+/* Line 1813 of yacc.c */ | |
+#line 1706 "sapi/phpdbg/phpdbg_parser.c" | |
default: break; | |
} | |
/* User semantic actions sometimes alter yychar, and that requires | |
@@ -1921,8 +1933,8 @@ yyreturn: | |
} | |
-/* Line 2050 of yacc.c */ | |
-#line 176 "sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 2076 of yacc.c */ | |
+#line 176 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
static int yyerror(const char *msg) { | |
diff --git a/sapi/phpdbg/phpdbg_parser.h b/sapi/phpdbg/phpdbg_parser.h | |
index 38d3ecb..59992fb 100644 | |
--- a/sapi/phpdbg/phpdbg_parser.h | |
+++ b/sapi/phpdbg/phpdbg_parser.h | |
@@ -1,8 +1,8 @@ | |
-/* A Bison parser, made by GNU Bison 2.7.12-4996. */ | |
+/* A Bison parser, made by GNU Bison 2.6.4. */ | |
/* Bison interface for Yacc-like parsers in C | |
- Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. | |
+ Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. | |
This program is free software: you can redistribute it and/or modify | |
it under the terms of the GNU General Public License as published by | |
@@ -40,8 +40,8 @@ | |
extern int phpdbg_debug; | |
#endif | |
/* "%code requires" blocks. */ | |
-/* Line 2060 of yacc.c */ | |
-#line 36 "/Users/Bob/php-src-X/sapi/phpdbg/phpdbg_parser.y" | |
+/* Line 2077 of yacc.c */ | |
+#line 36 "/home/yohgaki/workspace/ext/git/oss/php.net/github-php-src/sapi/phpdbg/phpdbg_parser.y" | |
#include "phpdbg.h" | |
#ifndef YY_TYPEDEF_YY_SCANNER_T | |
@@ -50,7 +50,7 @@ typedef void* yyscan_t; | |
#endif | |
-/* Line 2060 of yacc.c */ | |
+/* Line 2077 of yacc.c */ | |
#line 55 "sapi/phpdbg/phpdbg_parser.h" | |
/* Tokens. */ | |
@@ -81,28 +81,6 @@ typedef void* yyscan_t; | |
T_REQ_ID = 277 | |
}; | |
#endif | |
-/* Tokens. */ | |
-#define T_EVAL 258 | |
-#define T_RUN 259 | |
-#define T_SHELL 260 | |
-#define T_IF 261 | |
-#define T_TRUTHY 262 | |
-#define T_FALSY 263 | |
-#define T_STRING 264 | |
-#define T_COLON 265 | |
-#define T_DCOLON 266 | |
-#define T_POUND 267 | |
-#define T_SEPARATOR 268 | |
-#define T_PROTO 269 | |
-#define T_DIGITS 270 | |
-#define T_LITERAL 271 | |
-#define T_ADDR 272 | |
-#define T_OPCODE 273 | |
-#define T_ID 274 | |
-#define T_INPUT 275 | |
-#define T_UNEXPECTED 276 | |
-#define T_REQ_ID 277 | |
- | |
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment