From: Eric Covener Date: Sat, 27 May 2017 21:12:39 +0000 (+0000) Subject: revert r1796447, this should be RTC. X-Git-Tag: 2.4.26~72 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=da89aac776dcd8c1153c033ff046198782dc5d94;p=apache revert r1796447, this should be RTC. git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1796453 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/CHANGES b/CHANGES index fa9de1925e..18d5121f8d 100644 --- a/CHANGES +++ b/CHANGES @@ -5,9 +5,6 @@ Changes with Apache 2.4.26 *) core: EBCDIC fixes for interim responses with additional headers. [Eric Covener] - *) core: ap_parse_form_data() URL-decoding doesn't work on EBCDIC - platforms. PR61124. [Hank Ibell ] - *) Evaluate nested If/ElseIf/Else configuration blocks. [Luca Toscano, Jacob Champion] diff --git a/server/util.c b/server/util.c index 6667ac2e46..fba34bde1a 100644 --- a/server/util.c +++ b/server/util.c @@ -2666,7 +2666,8 @@ AP_DECLARE(int) ap_parse_form_data(request_rec *r, ap_filter_t *f, ap_form_pair_t *pair = NULL; apr_array_header_t *pairs = apr_array_make(r->pool, 4, sizeof(ap_form_pair_t)); - char escaped_char[2]; + char hi = 0; + char low = 0; *ptr = pairs; @@ -2733,13 +2734,30 @@ AP_DECLARE(int) ap_parse_form_data(request_rec *r, ap_filter_t *f, continue; } if (FORM_PERCENTA == percent) { - escaped_char[0] = c; + if (c >= 'a') { + hi = c - 'a' + 10; + } + else if (c >= 'A') { + hi = c - 'A' + 10; + } + else if (c >= '0') { + hi = c - '0'; + } + hi = hi << 4; percent = FORM_PERCENTB; continue; } if (FORM_PERCENTB == percent) { - escaped_char[1] = c; - c = x2c(escaped_char); + if (c >= 'a') { + low = c - 'a' + 10; + } + else if (c >= 'A') { + low = c - 'A' + 10; + } + else if (c >= '0') { + low = c - '0'; + } + c = low | hi; percent = FORM_NORMAL; } switch (state) {