admin管理员组文章数量:1635671
问题现象
出错代码如下
sprintf(fullpath, "%s/%s%s%s%s", path, ecertdir, "/Resp-", cert_id, ".oer");
sprintf(fullpath, "%s/%s%s", fullpath, cert_id, ".oer");
valgrind报错如下:
==83141== Source and destination overlap in mempcpy(0x1ffefffd00, 0x1ffefffd00, 52)
==83141== at 0x4843740: mempcpy (in /usr/lib/x86_64-linux-gnu/valgrind/vgpreload_memcheck-amd64-linux.so)
==83141== by 0x526E1D8: _IO_default_xsputn (genops.c:386)
==83141== by 0x526E1D8: _IO_default_xsputn (genops.c:370)
==83141== by 0x525327B: __vfprintf_internal (vfprintf-internal.c:1688)
==83141== by 0x5261278: __vsprintf_internal (iovsprintf.c:95)
==83141== by 0x5309EDA: __sprintf_chk (sprintf_chk.c:40)
==83141== by 0x11E56D: sprintf (stdio2.h:36)
==83141== by 0x11E56D: Cert_Req_Save (https_client.c:1940)
==83141== by 0x11E56D: main (https_client.c:2779)
问题分析
使用sprintf拼接字符串时,将后面的拼接结果要存入fullpath,对几个变量长度进行对比,因为几个标量为字符型数组,因此分配了静态空间,发现fullpath小于拼接后的字符空间长度,造成了异常。
解决方法
保证最终的空间比拼接好的字符串空间更大,这里的字符串空间不是字符串实际所占空间,是为这个字符串所分配的空间。
本文标签: destinationSourcemempcpyoverlap
版权声明:本文标题:Source and destination overlap in mempcpy 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1729214047a1190208.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论