1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

mask upper nibble

* ext/cgi/escape/escape.c (optimized_escape): move c and use it
  instead of cstr[i].  mask upper nibble for the platforms where
  CHAR_BIT > 8.  [Fix GH-1238]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53733 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2016-02-04 05:10:36 +00:00
parent 7d1dd7cad8
commit a320f811cf

View file

@ -106,8 +106,9 @@ optimized_escape(VALUE str)
len = RSTRING_LEN(str);
cstr = RSTRING_PTR(str);
for (i = 0; i < len; i++) {
if (!url_unreserved_char(cstr[i])) {
for (i = 0; i < len; ++i) {
const unsigned char c = (unsigned char)cstr[i];
if (!url_unreserved_char(c)) {
if (!dest) {
dest = rb_str_buf_new(len);
}
@ -115,12 +116,11 @@ optimized_escape(VALUE str)
rb_str_cat(dest, cstr + beg, i - beg);
beg = i + 1;
if (cstr[i] == ' ') {
if (c == ' ') {
rb_str_cat_cstr(dest, "+");
}
else {
unsigned char c = (unsigned char)cstr[i];
buf[1] = upper_hexdigits[c >> 4];
buf[1] = upper_hexdigits[(c >> 4) & 0xf];
buf[2] = upper_hexdigits[c & 0xf];
rb_str_cat(dest, buf, 3);
}