gcc 4.4导致程序异常的问题
storage_sync.c:
214 char out_buff[sizeof(TrackerHeader)+FDFS_GROUP_NAME_MAX_LEN+256];
237 snprintf(out_buff + sizeof(TrackerHeader) + 4, sizeof(out_buff) -
sizeof(TrackerHeader), "%s", g_group_name);
上面的snprintf在gcc4.4下编译时会有警告信息。运行fdfs_storaged,当执行到这行代码时,程序会异常退出。
仔细对比看了半天,终于找到了原因。第二个参数是:sizeof(out_buff) - sizeof(TrackerHeader),没有多减去4导致的。
gcc认为可能会导致buffer溢出,就直接挂了。
低版本的gcc,没有任何问题。mb,看来太智能不见得是好事,gcc多管闲事哇!
害得我辛辛苦苦下载vmware 7.1和Ubuntu server 10.04。
有了环境,神马都清楚了,只是搭建过程比较折腾。
修正后的代码:
memcpy(out_buff + sizeof(TrackerHeader) + 4, g_group_name,
sizeof(g_group_name));
或者:
snprintf(out_buff + sizeof(TrackerHeader) + 4, sizeof(out_buff) -
sizeof(TrackerHeader) - 4, "%s", g_group_name);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
祝贺鱼老大顺利debug
顶fishman,学习了!
没白折腾:)
来支持下鱼老大
回复 2# L_kernel
因为在Ubuntu10.04下,这个问题很严重,会导致程序异常退出。
补充一下:高版本gcc严格检查是对的,只怪自己以前没有这样的编译环境。
不怨天,不怨地,不骂娘,问题解决了就好。收回1楼的mb字样,嘿嘿。
楼主表示非常开心和欣慰。
专门为了修正一个bug,搭建一个环境?