Является ли PathCchCombine безопасной версией PathCombine?

После сканирования Fortify, он жалуется на PathCombine функция

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

Так что я думаю использовать PathCchCombine вместо. потому что он использует «Размер буфера назначения» в качестве аргумента. Могу ли я сказать, что это достаточно безопасно. Или есть ли лучший способ, чем этот.

0

Решение

Это зависит от того, чего именно вы хотите достичь.

В качестве основного принципа объединения двух фрагментов пути PathCChCombine безопаснее в некоторых важных аспектах.

Для ясности:

  1. Это НЕ предотвращает переполнение буфера вывода.

  2. Это НЕ позволяет вам иметь буфер назначения дольше, чем MAX_PATH

  3. Это дает вам лучшую обратную связь в форме HRESULT, где вы можете создать лучшую обработку потока, а не получить неприятное исключение памяти.

  4. Он принимает пути с префиксами «\», «\? \» И «\? \ UNC \», а PathCombine — НЕ.

Есть ли способ лучше:

Ну, это где это зависит от ваших предположений. Но если предположить, что вы хотите обрабатывать возвращаемые пути (выходной буфер) дольше, чем MAX_PATH, тогда вам следует взглянуть на

PathCChCombineEx:

Эта функция позволяет установить буфер назначения длиннее, чем MAX_PATH. Для этого вам нужно установить конечный параметр (dwFlags) с помощью PATHCCH_ALLOW_LONG_PATHS(0x00000001).

ПРИМЕЧАНИЕ. Когда установлен флаг PATHCCH_ALLOW_LONG_PATHS, выходной буфер
должно быть больше, чем MAX_PATH

PathAllocCombine:

Эта функция отличается от PathCchCombine и PathCchCombineEx тем, что
выходной буфер создается в куче. Это означает, что вам не нужно
объявите размер возвращаемой строки и уменьшите использование стека.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]