]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-7.2'
authorChristoph M. Becker <cmbecker69@gmx.de>
Thu, 12 Apr 2018 15:43:23 +0000 (17:43 +0200)
committerChristoph M. Becker <cmbecker69@gmx.de>
Thu, 12 Apr 2018 15:51:05 +0000 (17:51 +0200)
* PHP-7.2:
  Fixed #74892 - Fixed URL rewriting for urls started with #

1  2 
ext/standard/url_scanner_ex.c
ext/standard/url_scanner_ex.re

index 2601087658fb5e85e4b8d77e7158cd6e64cb636f,5784de98d2e4690645a2e85a59c11d3b7fa39504..54995dc0b11ea2293968941ed57d726e8a7a719e
@@@ -196,10 -194,17 +196,17 @@@ static inline void append_modified_url(
                return;
        }
  
+       /* Don't modify URLs of the format "#mark" */
+       if (url_parts->fragment && '#' == ZSTR_VAL(url->s)[0]) {
+               smart_str_append_smart_str(dest, url);
+               php_url_free(url_parts);
+               return;
+       }
        /* Check protocol. Only http/https is allowed. */
        if (url_parts->scheme
 -              && strcasecmp("http", url_parts->scheme)
 -              && strcasecmp("https", url_parts->scheme)) {
 +              && !zend_string_equals_literal_ci(url_parts->scheme, "http")
 +              && !zend_string_equals_literal_ci(url_parts->scheme, "https")) {
                smart_str_append_smart_str(dest, url);
                php_url_free(url_parts);
                return;
@@@ -515,7 -519,7 +521,7 @@@ state_plain_begin
  state_plain:
        start = YYCURSOR;
  
- #line 519 "ext/standard/url_scanner_ex.c"
 -#line 523 "ext/standard/url_scanner_ex.c"
++#line 525 "ext/standard/url_scanner_ex.c"
  {
        YYCTYPE yych;
        static const unsigned char yybm[] = {
@@@ -565,22 -569,22 +571,22 @@@ yy2
        if (yybm[0+yych] & 128) {
                goto yy2;
        }
- #line 522 "ext/standard/url_scanner_ex.re"
 -#line 526 "ext/standard/url_scanner_ex.re"
++#line 528 "ext/standard/url_scanner_ex.re"
        { passthru(STD_ARGS); goto state_plain; }
- #line 571 "ext/standard/url_scanner_ex.c"
 -#line 575 "ext/standard/url_scanner_ex.c"
++#line 577 "ext/standard/url_scanner_ex.c"
  yy5:
        ++YYCURSOR;
- #line 521 "ext/standard/url_scanner_ex.re"
 -#line 525 "ext/standard/url_scanner_ex.re"
++#line 527 "ext/standard/url_scanner_ex.re"
        { passthru(STD_ARGS); STATE = STATE_TAG; goto state_tag; }
- #line 576 "ext/standard/url_scanner_ex.c"
 -#line 580 "ext/standard/url_scanner_ex.c"
++#line 582 "ext/standard/url_scanner_ex.c"
  }
- #line 523 "ext/standard/url_scanner_ex.re"
 -#line 527 "ext/standard/url_scanner_ex.re"
++#line 529 "ext/standard/url_scanner_ex.re"
  
  
  state_tag:
        start = YYCURSOR;
  
- #line 584 "ext/standard/url_scanner_ex.c"
 -#line 588 "ext/standard/url_scanner_ex.c"
++#line 590 "ext/standard/url_scanner_ex.c"
  {
        YYCTYPE yych;
        static const unsigned char yybm[] = {
                goto yy11;
        }
        ++YYCURSOR;
- #line 529 "ext/standard/url_scanner_ex.re"
 -#line 533 "ext/standard/url_scanner_ex.re"
++#line 535 "ext/standard/url_scanner_ex.re"
        { passthru(STD_ARGS); goto state_plain_begin; }
- #line 629 "ext/standard/url_scanner_ex.c"
 -#line 633 "ext/standard/url_scanner_ex.c"
++#line 635 "ext/standard/url_scanner_ex.c"
  yy11:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        if (yybm[0+yych] & 128) {
                goto yy11;
        }
- #line 528 "ext/standard/url_scanner_ex.re"
 -#line 532 "ext/standard/url_scanner_ex.re"
++#line 534 "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 639 "ext/standard/url_scanner_ex.c"
 -#line 643 "ext/standard/url_scanner_ex.c"
++#line 645 "ext/standard/url_scanner_ex.c"
  }
- #line 530 "ext/standard/url_scanner_ex.re"
 -#line 534 "ext/standard/url_scanner_ex.re"
++#line 536 "ext/standard/url_scanner_ex.re"
  
  
  state_next_arg_begin:
  state_next_arg:
        start = YYCURSOR;
  
- #line 650 "ext/standard/url_scanner_ex.c"
 -#line 654 "ext/standard/url_scanner_ex.c"
++#line 656 "ext/standard/url_scanner_ex.c"
  {
        YYCTYPE yych;
        static const unsigned char yybm[] = {
  yy16:
        ++YYCURSOR;
  yy17:
- #line 541 "ext/standard/url_scanner_ex.re"
 -#line 545 "ext/standard/url_scanner_ex.re"
++#line 547 "ext/standard/url_scanner_ex.re"
        { passthru(STD_ARGS); goto state_plain_begin; }
- #line 708 "ext/standard/url_scanner_ex.c"
 -#line 712 "ext/standard/url_scanner_ex.c"
++#line 714 "ext/standard/url_scanner_ex.c"
  yy18:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        if (yybm[0+yych] & 128) {
                goto yy18;
        }
- #line 539 "ext/standard/url_scanner_ex.re"
 -#line 543 "ext/standard/url_scanner_ex.re"
++#line 545 "ext/standard/url_scanner_ex.re"
        { passthru(STD_ARGS); goto state_next_arg; }
- #line 718 "ext/standard/url_scanner_ex.c"
 -#line 722 "ext/standard/url_scanner_ex.c"
++#line 724 "ext/standard/url_scanner_ex.c"
  yy21:
        yych = *++YYCURSOR;
        if (yych != '>') goto yy17;
  yy22:
        ++YYCURSOR;
- #line 538 "ext/standard/url_scanner_ex.re"
 -#line 542 "ext/standard/url_scanner_ex.re"
++#line 544 "ext/standard/url_scanner_ex.re"
        { passthru(STD_ARGS); handle_form(STD_ARGS); goto state_plain_begin; }
- #line 726 "ext/standard/url_scanner_ex.c"
 -#line 730 "ext/standard/url_scanner_ex.c"
++#line 732 "ext/standard/url_scanner_ex.c"
  yy24:
        ++YYCURSOR;
- #line 540 "ext/standard/url_scanner_ex.re"
 -#line 544 "ext/standard/url_scanner_ex.re"
++#line 546 "ext/standard/url_scanner_ex.re"
        { --YYCURSOR; STATE = STATE_ARG; goto state_arg; }
- #line 731 "ext/standard/url_scanner_ex.c"
 -#line 735 "ext/standard/url_scanner_ex.c"
++#line 737 "ext/standard/url_scanner_ex.c"
  }
- #line 542 "ext/standard/url_scanner_ex.re"
 -#line 546 "ext/standard/url_scanner_ex.re"
++#line 548 "ext/standard/url_scanner_ex.re"
  
  
  state_arg:
        start = YYCURSOR;
  
- #line 739 "ext/standard/url_scanner_ex.c"
 -#line 743 "ext/standard/url_scanner_ex.c"
++#line 745 "ext/standard/url_scanner_ex.c"
  {
        YYCTYPE yych;
        static const unsigned char yybm[] = {
        if (yych <= 'z') goto yy30;
  yy28:
        ++YYCURSOR;
- #line 548 "ext/standard/url_scanner_ex.re"
 -#line 552 "ext/standard/url_scanner_ex.re"
++#line 554 "ext/standard/url_scanner_ex.re"
        { passthru(STD_ARGS); STATE = STATE_NEXT_ARG; goto state_next_arg; }
- #line 786 "ext/standard/url_scanner_ex.c"
 -#line 790 "ext/standard/url_scanner_ex.c"
++#line 792 "ext/standard/url_scanner_ex.c"
  yy30:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        if (yybm[0+yych] & 128) {
                goto yy30;
        }
- #line 547 "ext/standard/url_scanner_ex.re"
 -#line 551 "ext/standard/url_scanner_ex.re"
++#line 553 "ext/standard/url_scanner_ex.re"
        { passthru(STD_ARGS); handle_arg(STD_ARGS); STATE = STATE_BEFORE_VAL; goto state_before_val; }
- #line 796 "ext/standard/url_scanner_ex.c"
 -#line 800 "ext/standard/url_scanner_ex.c"
++#line 802 "ext/standard/url_scanner_ex.c"
  }
- #line 549 "ext/standard/url_scanner_ex.re"
 -#line 553 "ext/standard/url_scanner_ex.re"
++#line 555 "ext/standard/url_scanner_ex.re"
  
  
  state_before_val:
        start = YYCURSOR;
  
- #line 804 "ext/standard/url_scanner_ex.c"
 -#line 808 "ext/standard/url_scanner_ex.c"
++#line 810 "ext/standard/url_scanner_ex.c"
  {
        YYCTYPE yych;
        static const unsigned char yybm[] = {
        if (yych == '=') goto yy38;
        ++YYCURSOR;
  yy36:
- #line 555 "ext/standard/url_scanner_ex.re"
 -#line 559 "ext/standard/url_scanner_ex.re"
++#line 561 "ext/standard/url_scanner_ex.re"
        { --YYCURSOR; goto state_next_arg_begin; }
- #line 849 "ext/standard/url_scanner_ex.c"
 -#line 853 "ext/standard/url_scanner_ex.c"
++#line 855 "ext/standard/url_scanner_ex.c"
  yy37:
        yych = *(YYMARKER = ++YYCURSOR);
        if (yych == ' ') goto yy41;
@@@ -857,9 -861,9 +863,9 @@@ yy38
        if (yybm[0+yych] & 128) {
                goto yy38;
        }
- #line 554 "ext/standard/url_scanner_ex.re"
 -#line 558 "ext/standard/url_scanner_ex.re"
++#line 560 "ext/standard/url_scanner_ex.re"
        { passthru(STD_ARGS); STATE = STATE_VAL; goto state_val; }
- #line 863 "ext/standard/url_scanner_ex.c"
 -#line 867 "ext/standard/url_scanner_ex.c"
++#line 869 "ext/standard/url_scanner_ex.c"
  yy41:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
        YYCURSOR = YYMARKER;
        goto yy36;
  }
- #line 556 "ext/standard/url_scanner_ex.re"
 -#line 560 "ext/standard/url_scanner_ex.re"
++#line 562 "ext/standard/url_scanner_ex.re"
  
  
  
  state_val:
        start = YYCURSOR;
  
- #line 880 "ext/standard/url_scanner_ex.c"
 -#line 884 "ext/standard/url_scanner_ex.c"
++#line 886 "ext/standard/url_scanner_ex.c"
  {
        YYCTYPE yych;
        static const unsigned char yybm[] = {
@@@ -929,15 -933,15 +935,15 @@@ yy46
        if (yybm[0+yych] & 32) {
                goto yy46;
        }
- #line 564 "ext/standard/url_scanner_ex.re"
 -#line 568 "ext/standard/url_scanner_ex.re"
++#line 570 "ext/standard/url_scanner_ex.re"
        { handle_val(STD_ARGS, 0, ' '); goto state_next_arg_begin; }
- #line 935 "ext/standard/url_scanner_ex.c"
 -#line 939 "ext/standard/url_scanner_ex.c"
++#line 941 "ext/standard/url_scanner_ex.c"
  yy49:
        ++YYCURSOR;
  yy50:
- #line 565 "ext/standard/url_scanner_ex.re"
 -#line 569 "ext/standard/url_scanner_ex.re"
++#line 571 "ext/standard/url_scanner_ex.re"
        { passthru(STD_ARGS); goto state_next_arg_begin; }
- #line 941 "ext/standard/url_scanner_ex.c"
 -#line 945 "ext/standard/url_scanner_ex.c"
++#line 947 "ext/standard/url_scanner_ex.c"
  yy51:
        yych = *(YYMARKER = ++YYCURSOR);
        if (yych == '>') goto yy50;
@@@ -960,9 -964,9 +966,9 @@@ yy55
        goto yy50;
  yy56:
        ++YYCURSOR;
- #line 562 "ext/standard/url_scanner_ex.re"
 -#line 566 "ext/standard/url_scanner_ex.re"
++#line 568 "ext/standard/url_scanner_ex.re"
        { handle_val(STD_ARGS, 1, '"'); goto state_next_arg_begin; }
- #line 966 "ext/standard/url_scanner_ex.c"
 -#line 970 "ext/standard/url_scanner_ex.c"
++#line 972 "ext/standard/url_scanner_ex.c"
  yy58:
        ++YYCURSOR;
        if (YYLIMIT <= YYCURSOR) YYFILL(1);
@@@ -973,11 -977,11 +979,11 @@@ yy59
        }
        if (yych >= '(') goto yy55;
        ++YYCURSOR;
- #line 563 "ext/standard/url_scanner_ex.re"
 -#line 567 "ext/standard/url_scanner_ex.re"
++#line 569 "ext/standard/url_scanner_ex.re"
        { handle_val(STD_ARGS, 1, '\''); goto state_next_arg_begin; }
- #line 979 "ext/standard/url_scanner_ex.c"
 -#line 983 "ext/standard/url_scanner_ex.c"
++#line 985 "ext/standard/url_scanner_ex.c"
  }
- #line 566 "ext/standard/url_scanner_ex.re"
 -#line 570 "ext/standard/url_scanner_ex.re"
++#line 572 "ext/standard/url_scanner_ex.re"
  
  
  stop:
index d21004f3cef0d0a5ec877f5f083f46e29e763f9c,628a7fee58c3c93bc779846ba8d1a306826b7e56..68edab084a0d80587f79ebef915074be4e12af38
@@@ -199,10 -197,17 +199,17 @@@ static inline void append_modified_url(
                return;
        }
  
+       /* Don't modify URLs of the format "#mark" */
+       if (url_parts->fragment && '#' == ZSTR_VAL(url->s)[0]) {
+               smart_str_append_smart_str(dest, url);
+               php_url_free(url_parts);
+               return;
+       }
        /* Check protocol. Only http/https is allowed. */
        if (url_parts->scheme
 -              && strcasecmp("http", url_parts->scheme)
 -              && strcasecmp("https", url_parts->scheme)) {
 +              && !zend_string_equals_literal_ci(url_parts->scheme, "http")
 +              && !zend_string_equals_literal_ci(url_parts->scheme, "https")) {
                smart_str_append_smart_str(dest, url);
                php_url_free(url_parts);
                return;