После сканирования Fortify, он жалуется на PathCombine
функция
TCHAR buff[_MAX_MAX_PATH];
PathCombine(buff, s1, strTemp);
Так что я думаю использовать PathCchCombine
вместо. потому что он использует «Размер буфера назначения» в качестве аргумента. Могу ли я сказать, что это достаточно безопасно. Или есть ли лучший способ, чем этот.
Это зависит от того, чего именно вы хотите достичь.
В качестве основного принципа объединения двух фрагментов пути PathCChCombine безопаснее в некоторых важных аспектах.
Для ясности:
Это НЕ предотвращает переполнение буфера вывода.
Это НЕ позволяет вам иметь буфер назначения дольше, чем MAX_PATH
Это дает вам лучшую обратную связь в форме HRESULT, где вы можете создать лучшую обработку потока, а не получить неприятное исключение памяти.
Он принимает пути с префиксами «\», «\? \» И «\? \ UNC \», а PathCombine — НЕ.
Есть ли способ лучше:
Ну, это где это зависит от ваших предположений. Но если предположить, что вы хотите обрабатывать возвращаемые пути (выходной буфер) дольше, чем MAX_PATH, тогда вам следует взглянуть на
Эта функция позволяет установить буфер назначения длиннее, чем MAX_PATH. Для этого вам нужно установить конечный параметр (dwFlags) с помощью PATHCCH_ALLOW_LONG_PATHS(0x00000001).
ПРИМЕЧАНИЕ. Когда установлен флаг PATHCCH_ALLOW_LONG_PATHS, выходной буфер
должно быть больше, чем MAX_PATH
Эта функция отличается от PathCchCombine и PathCchCombineEx тем, что
выходной буфер создается в куче. Это означает, что вам не нужно
объявите размер возвращаемой строки и уменьшите использование стека.
Других решений пока нет …