From 473c22a7f3bc99e6a5e725a41492da30193c9c55 Mon Sep 17 00:00:00 2001 From: Greg Farnum Date: Fri, 2 Apr 2010 14:21:16 -0700 Subject: [PATCH] rgw: call url_decode in more appropriate places --- src/rgw/rgw_common.cc | 1 + src/rgw/rgw_rest.cc | 10 ++++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/rgw/rgw_common.cc b/src/rgw/rgw_common.cc index da9debcea178f..faee09141f644 100644 --- a/src/rgw/rgw_common.cc +++ b/src/rgw/rgw_common.cc @@ -115,6 +115,7 @@ static char hex_to_num(char c) bool url_decode(string& src_str, string& dest_str) { + cerr << "in url_decode with " << src_str << std::endl; const char *src = src_str.c_str(); char dest[src_str.size()]; int pos = 0; diff --git a/src/rgw/rgw_rest.cc b/src/rgw/rgw_rest.cc index 3a609e4dfeaa9..83e8bddbf8da8 100644 --- a/src/rgw/rgw_rest.cc +++ b/src/rgw/rgw_rest.cc @@ -412,7 +412,8 @@ void init_entities_from_header(struct req_state *s) int pos = h.find("s3."); if (pos > 0) { - s->bucket_str = h.substr(0, pos-1); + string encoded_bucket = h.substr(0, pos-1); + url_decode(encoded_bucket, s->bucket_str); s->bucket = s->bucket_str.c_str(); s->host_bucket = s->bucket; } else { @@ -450,16 +451,17 @@ void init_entities_from_header(struct req_state *s) } if (!s->bucket) { - s->bucket_str = first; + url_decode(first, s->bucket_str); s->bucket = s->bucket_str.c_str(); } else { - s->object_str = req; + url_decode(req, s->object_str); s->object = s->object_str.c_str(); return; } if (pos >= 0) { - s->object_str = req.substr(pos+1); + string encoded_obj_str = req.substr(pos+1); + url_decode(encoded_obj_str, s->object_str); if (s->object_str.size() > 0) { s->object = s->object_str.c_str(); -- 2.39.5