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/

10-11 16:23