c++ PathCchCombine是PathCombine的安全版本吗

9ceoxa92  于 2023-07-01  发布在  其他
关注(0)|答案(2)|浏览(134)

Fortify扫描后,它抱怨PathCombine功能

TCHAR buff[_MAX_MAX_PATH];
PathCombine(buff, s1, strTemp);

所以我想用PathCchCombine代替。因为它使用“目标缓冲区的大小”作为参数。我可以说这已经足够安全了。或者还有比这更好的办法。

kdfy810k

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的不同之处在于输出缓冲区是在堆上创建的。这意味着您不需要声明返回字符串的大小,并减少了堆栈的使用。

wrrgggsh

wrrgggsh2#

有时候,将当前目录设置为第一个路径会更简单。(SetCurrentDirectory函数)。例如,当您只想检查路径中的某个文件是否存在,并且它是相对路径形式时。

相关问题