Microsoft的strncat读取源缓冲区边界之外的字节
我观察到strncat的Microsoft实现有一个有趣的问题.它接触源缓冲区之外的1个字节.请考虑以下代码:
#include <stdio.h> #include <stdlib.h> #include <memory.h> #include <string.h> void main() { char dstBuf[1024]; char* src = malloc(112); memset(src,'a',112); dstBuf[0] = 0; strncat(dstBuf,src,112); } strncat在112字节块后读取1个字节.因此,如果您不幸在无效页面边界上进行分配,则应用程序崩溃.大型应用程序可能会在这些地方间歇性地崩溃. (请注意,可以使用gflags PageHeap设置模拟此类条件;块大小必须能够被指针大小整除才能正确对齐.) 这是预期的行为还是错误?任何确认的链接? (我阅读了strncat的几个描述,但它们可以通过两种方式解释,具体取决于你的初始思路……) 更新(回答有关证据的问题): Update2(关于编译器的信息) 更新3此问题还使用MS Visual Studio 2012 11.0.50727.1中内置的二进制文件重现 更新4 Link to issue on Microsoft Connect; link to discussion on MSDN Forums 更新5问题将在下一个VS版本中修复.旧版本没有计划修复.请参阅上面的“Microsoft Connect”链接.
documentation for strncat 声明:
因此,实现可以假设src输入参数实际上是NUL终止的,即使它比计数字符长. 为进一步确认,Microsoft’s own documentation规定:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- windows – 在rabbitmq.conf文件中使用环境变量
- Windows Mobile中的非闭合关闭按钮(使用Qt开发)
- active-directory – 是否可以在其上安装多个具有FSMO角色的
- windows – 终端服务 – 阻止用户在远程会话中使用本地打印
- microsoft sql server:检查用户自己的权限
- 实体框架–MVC 6中缺少microsoft.data.entity(Visual Studi
- 在win7上运行ruby文件中的自动完成时gVim崩溃
- windows-server-2012 – 对共享文件夹的NetworkService帐户
- windows-server-2008 – Win7-Server2008 RDP连接挂起“保护
- 是否有Windows CMD相当于Unix shell的exec?
- active-directory – 针对Windows,Linux,网络设备
- windows-phone-7 – 如何将白色边框放到黑色的椭
- 真实世界的Windows Azure成本计算示例,任何人?
- 窗口 – signtool未能双重标记具有时间戳的SHA2和
- .net – EntityFramework.dll与System.Data.Enti
- xaml – windows phone 7.1中的scrollviewer网格
- (转)Windows下MySQL5.6查找my.ini配置文件
- windows – netsh int ip reset到底重置了什么?
- r – 在windows上安装gputools
- windows-phone-7 – 在给定延迟后执行方法的简便