diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-06-30 05:45:35 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-06-30 05:45:35 +0000 |
commit | d320f00ec257bd87aa63dd23f5f26f99ba6f2077 (patch) | |
tree | 3794d9851ef1275b10cb2f8ce9dbf5374707aa7c /ext | |
parent | 546837df4ecaf77a65e5645a31665e8c1616ffdb (diff) | |
download | ruby-d320f00ec257bd87aa63dd23f5f26f99ba6f2077.tar.gz |
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
Diffstat (limited to 'ext')
-rw-r--r-- | ext/cgi/escape/escape.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/ext/cgi/escape/escape.c b/ext/cgi/escape/escape.c index f11a72cd82..7289f43b8d 100644 --- a/ext/cgi/escape/escape.c +++ b/ext/cgi/escape/escape.c @@ -105,40 +105,38 @@ optimized_unescape_html(VALUE str) plen = i - beg; if (++i >= len) break; 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) { case 'a': ++i; - if (len - i >= 4 && memcmp(&cstr[i], "pos;", 4) == 0) { + if (MATCH("pos;")) { c = '\''; - i += 3; } - else if (len - i >= 3 && memcmp(&cstr[i], "mp;", 3) == 0) { + else if (MATCH("mp;")) { c = '&'; - i += 2; } else continue; break; case 'q': ++i; - if (len - i >= 4 && memcmp(&cstr[i], "uot;", 4) == 0) { + if (MATCH("uot;")) { c = '"'; - i += 3; } else continue; break; case 'g': ++i; - if (len - i >= 2 && memcmp(&cstr[i], "t;", 2) == 0) { + if (MATCH("t;")) { c = '>'; - i += 1; } else continue; break; case 'l': ++i; - if (len - i >= 2 && memcmp(&cstr[i], "t;", 2) == 0) { + if (MATCH("t;")) { c = '<'; - i += 1; } else continue; break; |