问题出现在如下代码:
sprintf(filename, "%s/.urban", getenv("home")); 【程序编程相关:在VC中导出C++类】sprintf(filename, "%s/.urban/savegame.dat", getenv("home")); 【推荐阅读:用C++程序删除文本文件中以“//”开头】..................... 【扩展信息:在VC++下对文件属性的获取与更改】sprintf(filename, "%s/.urban/savegame.dat", getenv("home"));当环境变量$home恶意变长后,因为sprintf没有限制输入的长度,故可以产生溢出.
代码升级如下:
snprintf(filename, sizeof(filename)-1, "%s/.urban/savegame.dat", getenv("home"));snprintf(filename, sizeof(filename)-1, "%s/.urban", getenv("home"));snprintf(filename, sizeof(filename)-1, "%s/.urban/savegame.dat", getenv("home"));....................
测试方法:
无
解决方法:
升级到urban 1.5.4