Fortify扫描后,它抱怨PathCombine功能
PathCombine
TCHAR buff[_MAX_MAX_PATH]; PathCombine(buff, s1, strTemp);
所以我想用PathCchCombine代替。因为它使用“目标缓冲区的大小”作为参数。我可以说这已经足够安全了。或者还有比这更好的办法。
PathCchCombine
kdfy810k1#
这完全取决于你想要达到的目标。作为组合两个路径片段的基本原则,PathCChCombine在一些重要方面更安全。
为清楚起见:
1.它不能防止输出缓冲区溢出。1.它不允许目标缓冲区的长度超过MAX_PATH1.它确实以HRESULT的形式给予了更好的反馈,您可以在其中构建更好的流处理,而不是得到讨厌的内存异常。1.它接受带有“\”、“\?\”和“\?\UNC\”作为前缀,PathCombine不使用这些前缀。
是否有更好的方法:
这取决于你的假设。但是假设你的问题是你想要处理比MAX_PATH长的返回路径(输出缓冲区),那么你应该看看PathCChCombineEx:此函数允许您将目标缓冲区设置为长于MAX_PATH。为此,您需要使用PATHCCH_ALLOW_LONG_PATHS(0x00000001)设置最终参数(dwFlags)。注:设置PATHCCH_ALLOW_LONG_PATHS标志时,输出缓冲区必须大于MAX_PATHPathAllocCombine:此函数与PathCchCombine和PathCchCombineEx的不同之处在于输出缓冲区是在堆上创建的。这意味着您不需要声明返回字符串的大小,并减少了堆栈的使用。
wrrgggsh2#
有时候,将当前目录设置为第一个路径会更简单。(SetCurrentDirectory函数)。例如,当您只想检查路径中的某个文件是否存在,并且它是相对路径形式时。
2条答案
按热度按时间kdfy810k1#
这完全取决于你想要达到的目标。
作为组合两个路径片段的基本原则,PathCChCombine在一些重要方面更安全。
为清楚起见:
1.它不能防止输出缓冲区溢出。
1.它不允许目标缓冲区的长度超过MAX_PATH
1.它确实以HRESULT的形式给予了更好的反馈,您可以在其中构建更好的流处理,而不是得到讨厌的内存异常。
1.它接受带有“\”、“\?\”和“\?\UNC\”作为前缀,PathCombine不使用这些前缀。
是否有更好的方法:
这取决于你的假设。但是假设你的问题是你想要处理比MAX_PATH长的返回路径(输出缓冲区),那么你应该看看
PathCChCombineEx:
此函数允许您将目标缓冲区设置为长于MAX_PATH。为此,您需要使用PATHCCH_ALLOW_LONG_PATHS(0x00000001)设置最终参数(dwFlags)。
注:设置PATHCCH_ALLOW_LONG_PATHS标志时,输出缓冲区必须大于MAX_PATH
PathAllocCombine:
此函数与PathCchCombine和PathCchCombineEx的不同之处在于输出缓冲区是在堆上创建的。这意味着您不需要声明返回字符串的大小,并减少了堆栈的使用。
wrrgggsh2#
有时候,将当前目录设置为第一个路径会更简单。(SetCurrentDirectory函数)。例如,当您只想检查路径中的某个文件是否存在,并且它是相对路径形式时。