Fortify扫描后,它抱怨PathCombine
功能
TCHAR buff[_MAX_MAX_PATH];
PathCombine(buff, s1, strTemp);
因此,我正在考虑使用
PathCchCombine
代替。因为它使用“目标缓冲区的大小”作为参数。我可以说这足够安全吗?还是有比这更好的方法了。 最佳答案
它确实取决于您要精确实现的目标。
作为组合两个路径片段的基本原理,PathCChCombine在某些重要方面更安全。
为了清楚起见:
它不能防止输出缓冲区溢出。
它不允许目标缓冲区的长度超过MAX_PATH
它以HRESULT的形式为您提供了更好的反馈,您可以在其中构造更好的流处理,而不是获取讨厌的内存异常。
它不接受带有“ \”,“ \?\”和“ \?\ UNC \”前缀的路径,而PathCombine不接受。
有没有更好的办法:
好吧,这取决于您的假设。但是假设您的问题是想处理返回的路径(输出缓冲区)的长度超过MAX_PATH,那么您应该看一下
PathCChCombineEx:
此功能允许您设置目标缓冲区的长度大于MAX_PATH。为此,您需要使用PATHCCH_ALLOW_LONG_PATHS(0x00000001)设置最终参数(dwFlags)。
注意:设置PATHCCH_ALLOW_LONG_PATHS标志时,输出缓冲区
必须大于MAX_PATH
PathAllocCombine:
此功能与PathCchCombine和PathCchCombineEx的不同之处在于
输出缓冲区在堆上创建。这意味着您不需要
声明返回的字符串的大小并减少堆栈使用。
关于c++ - PathCchCombine是否是PathCombine的安全版本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33950041/