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);
|
len = RSTRING_LEN(str);
|
||||||
cstr = RSTRING_PTR(str);
|
cstr = RSTRING_PTR(str);
|
||||||
|
|
||||||
for (i = 0; i < len; i++) {
|
for (i = 0; i < len; ++i) {
|
||||||
if (!url_unreserved_char(cstr[i])) {
|
const unsigned char c = (unsigned char)cstr[i];
|
||||||
|
if (!url_unreserved_char(c)) {
|
||||||
if (!dest) {
|
if (!dest) {
|
||||||
dest = rb_str_buf_new(len);
|
dest = rb_str_buf_new(len);
|
||||||
}
|
}
|
||||||
|
@ -115,12 +116,11 @@ optimized_escape(VALUE str)
|
||||||
rb_str_cat(dest, cstr + beg, i - beg);
|
rb_str_cat(dest, cstr + beg, i - beg);
|
||||||
beg = i + 1;
|
beg = i + 1;
|
||||||
|
|
||||||
if (cstr[i] == ' ') {
|
if (c == ' ') {
|
||||||
rb_str_cat_cstr(dest, "+");
|
rb_str_cat_cstr(dest, "+");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
unsigned char c = (unsigned char)cstr[i];
|
buf[1] = upper_hexdigits[(c >> 4) & 0xf];
|
||||||
buf[1] = upper_hexdigits[c >> 4];
|
|
||||||
buf[2] = upper_hexdigits[c & 0xf];
|
buf[2] = upper_hexdigits[c & 0xf];
|
||||||
rb_str_cat(dest, buf, 3);
|
rb_str_cat(dest, buf, 3);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue