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:
parent
7d1dd7cad8
commit
a320f811cf
1 changed files with 5 additions and 5 deletions
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue