遭遇缓冲区溢出

昨天写程序,Debug 版本运行正常,Release 版本却总是崩溃。经过一番苦战,终于弄清楚了崩溃的原因。其实说简单也简单,根本不是老汉的错误,而是微软的 RichEdit 控件有错误。

按照微软的规范,窗口对 WM_GETTEXT 消息的响应中要对用户提供的缓冲区长度进行检查,但 RichEdit 控件对该消息的响应代码中存在问题,会导致当文本是中英文混合(或者是只要不是全英文?)的时候,不理会用户传入的缓冲区大小的限制,而直接向缓冲区内复制超长的文本,从而覆盖用户程序的代码或数据。

示例代码如下,在 Windows XP SP2 上测试通过。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注