* 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:
nobu 2016-06-30 05:45:35 +00:00
Родитель 38d340f62e
Коммит 2282541898
1 изменённых файлов: 8 добавлений и 10 удалений

Просмотреть файл

@ -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;