- 论坛徽章:
- 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); |
|