|
5#
楼主 |
发表于 2014-9-14 00:50:30
|
只看该作者
本帖最后由 不点 于 2014-9-14 01:08 编辑
- stage2/cmdline.c
- @@ -252,9 +252,14 @@ static int run_cmd_line (char *heap,int flags);
- int run_line (char *heap,int flags)
- {
- - char *arg = heap;
- + char *cmdline_buf = cmd_buffer;
- + char *arg;
- int status = 0;
- int ret = 0;
- + int arg_len = strlen(heap) + 1;
- + memmove(cmdline_buf,heap,arg_len);
- + cmd_buffer += arg_len;
- + heap = cmdline_buf;
- while(*heap && (arg = heap))
- {
- heap = skip_to_next_cmd(heap,&status,OPT_MULTI_CMD_AND | OPT_MULTI_CMD_OR | OPT_MULTI_CMD);//next cmd
- @@ -265,6 +270,7 @@ int run_line (char *heap,int flags)
- heap = skip_to_next_cmd(heap,&status,OPT_MULTI_CMD);//next cmd
- }
- }
- + cmd_buffer = cmdline_buf;
- return ret;
- }
复制代码
我粗略看了一下,8月19日的改动不多,其他改动都不会有问题,唯独上面这个改动有可能出问题。
可能是内存产生了冲突或溢出。内存溢出的错误通常都很隐蔽的,不容易排查。
改动之前 heap 的值保持不变,但改动之后,heap 的值更新了。
另外,使用了 memmove 进行内存复制。会不会 heap 和 cmd_buffer 都指向同一个内存缓冲区,距离太近,导致互相覆盖?
我没看明白为何要改动 cmdline.c 里面的 run_line 函数。更新记录里面没有相关的记录。是排解 bug 吗?是增强什么功能吗?这个改动究竟是什么意思?
|
|