Fortify扫描后,它抱怨PathCombine
功能
TCHAR buff[_MAX_MAX_PATH];
PathCombine(buff, s1, strTemp);
所以我想改为使用PathCchCombine
。因为它使用"目标缓冲区的大小"作为一个论点。我可以说这足够安全吗?还是有比这更好的方法。
答案 0 :(得分:1)
这取决于你想要达到的目标。
作为组合两个路径片段的基本原则,PathCChCombine在某些重要方面更安全。
为清晰起见:
它不会阻止输出缓冲区溢出。
它不允许您的目标缓冲区长于MAX_PATH
IT会以HRESULT的形式为您提供更好的反馈,您可以在其中构建更好的流程处理,而不是产生讨厌的内存异常。
它接受带有“\”,“\?\”和“\?\ UNC \”前缀的路径,而PathCombine不会这样做。
有更好的方法:
这是取决于你的假设的地方。但假设您想要处理比MAX_PATH更长的返回路径(输出缓冲区),那么您应该看看
此功能允许您设置比MAX_PATH更长的目标缓冲区。为此,您需要使用 PATHCCH_ALLOW_LONG_PATHS (0x00000001)设置最终参数(dwFlags)。
注意:当PATHCCH_ALLOW_LONG_PATHS标志设置为输出缓冲区时 必须大于MAX_PATH
此功能与PathCchCombine和PathCchCombineEx不同 输出缓冲区在堆上创建。这意味着你不需要 声明返回字符串的大小并减少堆栈使用。