summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authorJim Jagielski <jim@apache.org>2017-05-30 12:18:18 +0000
committerJim Jagielski <jim@apache.org>2017-05-30 12:18:18 +0000
commit5979f0ada48e1c3187c937de87b652356050c40c (patch)
tree564743f1ba97ca1a92d06fecf8ce11033d1067d6 /server
parentf69fdd8c945023f04bcdbdf2a7fbc0a375da5300 (diff)
downloadhttpd-5979f0ada48e1c3187c937de87b652356050c40c.tar.gz
Merge r1796446 from trunk:
PR61124: ap_parse_form_data() EBCDIC fix URL-decoding doesn't work on EBCDIC. Submitted By: Hank Ibell <hwibell gmail.com> Submitted by: covener Reviewed by: covener, rjung, ylavic git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1796849 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'server')
-rw-r--r--server/util.c26
1 files changed, 4 insertions, 22 deletions
diff --git a/server/util.c b/server/util.c
index fba34bde1a..6667ac2e46 100644
--- a/server/util.c
+++ b/server/util.c
@@ -2666,8 +2666,7 @@ 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 hi = 0;
- char low = 0;
+ char escaped_char[2];
*ptr = pairs;
@@ -2734,30 +2733,13 @@ AP_DECLARE(int) ap_parse_form_data(request_rec *r, ap_filter_t *f,
continue;
}
if (FORM_PERCENTA == percent) {
- 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;
+ escaped_char[0] = c;
percent = FORM_PERCENTB;
continue;
}
if (FORM_PERCENTB == percent) {
- 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;
+ escaped_char[1] = c;
+ c = x2c(escaped_char);
percent = FORM_NORMAL;
}
switch (state) {