summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYehuda Sadeh <yehuda@inktank.com>2013-04-23 09:26:33 -0700
committerYehuda Sadeh <yehuda@inktank.com>2013-04-23 09:26:33 -0700
commit8fc3087792399e1caef1be7b616fc65c6879090c (patch)
tree592a1d3a6da426686b81840200381fd0392d17d9
parentde5d1da810732ee48f41e8be18257053d862301b (diff)
downloadceph-wip-4755.tar.gz
rgw: fix hex string translationwip-4755
Fixes: #4755 Original issue was that we implicitly assumed that char is signed, which is not the case on all architectures and was breaking arm. This fix avoids the implicit signed declaration and makes the actual test clearer. Reported-by: Adam Borowski <kilobyte@angband.pl> Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
-rw-r--r--src/rgw/rgw_common.cc14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/rgw/rgw_common.cc b/src/rgw/rgw_common.cc
index d9c0a809ac7..8f6fa686978 100644
--- a/src/rgw/rgw_common.cc
+++ b/src/rgw/rgw_common.cc
@@ -559,14 +559,14 @@ bool verify_object_permission(struct req_state *s, int perm)
return verify_object_permission(s, s->bucket_acl, s->object_acl, perm);
}
-static char hex_to_num(char c)
+static char hex_to_nibble(char c)
{
static char table[256];
static bool initialized = false;
if (!initialized) {
- memset(table, -1, sizeof(table));
+ memset(table, 0x10, sizeof(table));
int i;
for (i = '0'; i<='9'; i++)
table[i] = i - '0';
@@ -597,14 +597,14 @@ bool url_decode(string& src_str, string& dest_str)
src++;
if (!*src)
break;
- char c1 = hex_to_num(*src++);
+ char c1 = hex_to_nibble(*src++);
if (!*src)
break;
- c = c1 << 4;
- if (c1 < 0)
+ if (c1 >= 0x10)
return false;
- c1 = hex_to_num(*src++);
- if (c1 < 0)
+ c = c1 << 4;
+ c1 = hex_to_nibble(*src++);
+ if (c1 >= 0x10)
return false;
c |= c1;
dest[pos++] = c;