gpt4 book ai didi

c++ - PathCchCombine 是否是 PathCombine 的安全版本

转载 作者:行者123 更新时间:2023-11-28 05:57:05 25 4
gpt4 key购买 nike

Fortify 扫描后,它提示 PathCombine 函数

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

所以我想改用 PathCchCombine。因为它使用“目标缓冲区的大小”作为参数。我能说这足够安全吗?或者还有比这更好的方法吗。

最佳答案

这确实取决于您想要实现的目标。

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

为清楚起见:

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

  2. 它不允许您拥有超过 MAX_PATH 的目标缓冲区

  3. 它确实以 HRESULT 的形式为您提供更好的反馈,您可以在其中构造更好的流处理,而不是获得令人讨厌的内存异常。

  4. 它确实接受带有“\”、“\?\”和“\?\UNC\”前缀的路径,而 PathCombine 不接受。

有没有更好的办法:

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

PathCChCombineEx:

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

NOTE: When the PATHCCH_ALLOW_LONG_PATHS flag is set the output buffer must be more than MAX_PATH

PathAllocCombine:

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

关于c++ - PathCchCombine 是否是 PathCombine 的安全版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33950041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com