gcc 4.4导致程序异常的问题

发布于 2022-09-10 18:32:23 字数 1053 浏览 16 评论 6

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

梦里泪两行 2022-09-19 12:48:53

祝贺鱼老大顺利debug

緦唸λ蓇 2022-09-19 12:47:46

顶fishman,学习了!

花桑 2022-09-18 06:42:12

没白折腾:)

白云悠悠 2022-09-17 05:21:03

来支持下鱼老大

天荒地未老 2022-09-17 03:09:28

回复 2# L_kernel

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

蓝眼泪 2022-09-13 05:09:04

专门为了修正一个bug,搭建一个环境?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文