зеркало из https://github.com/github/ruby.git
Magic numbers
* ext/cgi/escape/escape.c (optimized_unescape_html): remove magic numbers for literal lengths. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55542 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
38d340f62e
Коммит
2282541898
|
@ -105,40 +105,38 @@ optimized_unescape_html(VALUE str)
|
||||||
plen = i - beg;
|
plen = i - beg;
|
||||||
if (++i >= len) break;
|
if (++i >= len) break;
|
||||||
c = (unsigned char)cstr[i];
|
c = (unsigned char)cstr[i];
|
||||||
|
#define MATCH(s) (len - i >= (int)rb_strlen_lit(s) && \
|
||||||
|
memcmp(&cstr[i], s, rb_strlen_lit(s)) == 0 && \
|
||||||
|
(i += rb_strlen_lit(s) - 1, 1))
|
||||||
switch (c) {
|
switch (c) {
|
||||||
case 'a':
|
case 'a':
|
||||||
++i;
|
++i;
|
||||||
if (len - i >= 4 && memcmp(&cstr[i], "pos;", 4) == 0) {
|
if (MATCH("pos;")) {
|
||||||
c = '\'';
|
c = '\'';
|
||||||
i += 3;
|
|
||||||
}
|
}
|
||||||
else if (len - i >= 3 && memcmp(&cstr[i], "mp;", 3) == 0) {
|
else if (MATCH("mp;")) {
|
||||||
c = '&';
|
c = '&';
|
||||||
i += 2;
|
|
||||||
}
|
}
|
||||||
else continue;
|
else continue;
|
||||||
break;
|
break;
|
||||||
case 'q':
|
case 'q':
|
||||||
++i;
|
++i;
|
||||||
if (len - i >= 4 && memcmp(&cstr[i], "uot;", 4) == 0) {
|
if (MATCH("uot;")) {
|
||||||
c = '"';
|
c = '"';
|
||||||
i += 3;
|
|
||||||
}
|
}
|
||||||
else continue;
|
else continue;
|
||||||
break;
|
break;
|
||||||
case 'g':
|
case 'g':
|
||||||
++i;
|
++i;
|
||||||
if (len - i >= 2 && memcmp(&cstr[i], "t;", 2) == 0) {
|
if (MATCH("t;")) {
|
||||||
c = '>';
|
c = '>';
|
||||||
i += 1;
|
|
||||||
}
|
}
|
||||||
else continue;
|
else continue;
|
||||||
break;
|
break;
|
||||||
case 'l':
|
case 'l':
|
||||||
++i;
|
++i;
|
||||||
if (len - i >= 2 && memcmp(&cstr[i], "t;", 2) == 0) {
|
if (MATCH("t;")) {
|
||||||
c = '<';
|
c = '<';
|
||||||
i += 1;
|
|
||||||
}
|
}
|
||||||
else continue;
|
else continue;
|
||||||
break;
|
break;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче