免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3646 | 回复: 6
打印 上一主题 下一主题

[FastDFS] gcc 4.4导致程序异常的问题 [复制链接]

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-12-04 01:35 |只看该作者 |倒序浏览
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);

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2010-12-04 13:27 |只看该作者
专门为了修正一个bug,搭建一个环境?

论坛徽章:
4
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11IT运维版块每日发帖之星
日期:2016-08-11 06:20:00IT运维版块每日发帖之星
日期:2016-08-15 06:20:00
3 [报告]
发表于 2010-12-04 13:54 |只看该作者
回复 2# L_kernel

因为在Ubuntu10.04下,这个问题很严重,会导致程序异常退出。
补充一下:高版本gcc严格检查是对的,只怪自己以前没有这样的编译环境。
不怨天,不怨地,不骂娘,问题解决了就好。收回1楼的mb字样,嘿嘿。
楼主表示非常开心和欣慰。

论坛徽章:
0
4 [报告]
发表于 2010-12-04 14:17 |只看该作者


来支持下鱼老大

论坛徽章:
0
5 [报告]
发表于 2010-12-06 10:17 |只看该作者
没白折腾:)

论坛徽章:
0
6 [报告]
发表于 2011-01-06 12:50 |只看该作者
顶fishman,学习了!

论坛徽章:
0
7 [报告]
发表于 2011-01-07 10:49 |只看该作者
祝贺鱼老大顺利debug
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP