PathCchCombine是PathCombine的安全版本吗?

时间:2015-11-27 03:55:39

标签: c++ window fortify

Fortify扫描后,它抱怨PathCombine功能

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

所以我想改为使用PathCchCombine。因为它使用"目标缓冲区的大小"作为一个论点。我可以说这足够安全吗?还是有比这更好的方法。

1 个答案:

答案 0 :(得分:1)

这取决于你想要达到的目标。

作为组合两个路径片段的基本原则,PathCChCombine在某些重要方面更安全。

为清晰起见:

  1. 它不会阻止输出缓冲区溢出。

  2. 它不允许您的目标缓冲区长于MAX_PATH

  3. IT会以HRESULT的形式为您提供更好的反馈,您可以在其中构建更好的流程处理,而不是产生讨厌的内存异常。

  4. 它接受带有“\”,“\?\”和“\?\ UNC \”前缀的路径,而PathCombine不会这样做。

  5. 有更好的方法:

    这是取决于你的假设的地方。但假设您想要处理比MAX_PATH更长的返回路径(输出缓冲区),那么您应该看看

    PathCChCombineEx:

    此功能允许您设置比MAX_PATH更长的目标缓冲区。为此,您需要使用 PATHCCH_ALLOW_LONG_PATHS (0x00000001)设置最终参数(dwFlags)。

      

    注意:当PATHCCH_ALLOW_LONG_PATHS标志设置为输出缓冲区时   必须大于MAX_PATH

    PathAllocCombine:

    此功能与PathCchCombine和PathCchCombineEx不同 输出缓冲区在堆上创建。这意味着你不需要 声明返回字符串的大小并减少堆栈使用。