主题:【原创】Chrome程序初探(序) -- 素里太守
Chrome推出后,网友们很快就发现了崩溃它的“秘诀” --- :%。
于是有人说:
不过真实的情况是,这是一个虫,正二八经的虫。
出错的代码位于c:\chrome\src\net\base\escape.cc,错误犯的还比较低级。
UnescapeRule::Type rules) {
// The output of the unescaping is always smaller than the input, so we can
// reserve the input size to make sure we have enough buffer and don't have
// to allocate in the loop below.
std::string result;
result.reserve(escaped_text.length());
for (size_t i = 0, max = escaped_text.size(), max_digit_index = max - 2;
i < max; ++i) {
if (escaped_text[i] == '%' && i < max_digit_index) {
const std::string::value_type most_sig_digit(escaped_text[i + 1]);
const std::string::value_type least_sig_digit(escaped_text[i + 2]);
if (IsHex(most_sig_digit) && IsHex(least_sig_digit)) {
unsigned char value = HexToInt(most_sig_digit) * 16 +
HexToInt(least_sig_digit);
当escaped_text的长度为1,而且仅包含%字符时“可能”出现非法访问的问题。
俺把代码改了一下
const std::string::value_type most_sig_digit(escaped_text[i + 1]);
const std::string::value_type least_sig_digit(textplusplus);
编译链接,虫子没有了。
本帖一共被 1 帖 引用 (帖内工具实现)
- 相关回复 上下关系8
🙂献花鼓励。。。 荆棘探兴 字0 2008-09-11 21:20:29
🙂存技术的文章我喜欢,鲜花鼓励。 季侯 字0 2008-09-11 21:12:30
🙂看不懂也要送花,坚决鼓励原创 晨枫 字0 2008-09-11 21:07:44
🙂一点小花絮,“:%” 虫
🙂这样不会数组访问越界么? crash 字545 2008-09-14 12:04:57
🙂【i+1】的问题。 素里太守 字257 2008-09-14 14:59:12
😁捉虫得宝 蜡笔小新 字103 2008-09-12 09:50:59
🙂送花 送花~~~`有好处啊 卫融 字88 2008-09-12 07:22:02