Узкая (широкая) символьная строка, передаваемая функции широкой (узкой) строки
Этот дефект возникает при передаче узкой символьной строки в функцию широкой строки или широкой символьной строки в функцию узкой строки.
Неправильное использование узкой или широкой символьной строки не вызывает дефектов в операционных системах, где узкие и широкие символьные строки имеют одинаковый размер.
Использование узкой символьной строки с широкой строковой функцией или наоборот может привести к неожиданному или неопределенному поведению.
При передаче широкой символьной строки узкой строковой функции могут возникнуть следующие проблемы:
Усечение данных. Если строка содержит пустые байты, операция копирования с использованием strncpy() может досрочно прекратить.
Неправильная длина строки. strlen() возвращает число символов строки до первого нулевого байта. Широкая строка может иметь дополнительные символы после своего первого пустого байта.
При передаче узкой символьной строки широкой строковой функции возникает следующая проблема:
Переполнение буфера. В операции копирования с использованием wcsncpy(), целевой строке может не хватить памяти для хранения результата копирования.
Используйте узкие строковые функции с узкими символьными строками. Используйте широкие строковые функции с широкими символьными строками.
| Группа: Программирование |
| Язык: C | C++ |
| По умолчанию: Откл. |
Синтаксис командной строки:
NARROW_WIDE_STR_MISUSE |
| Воздействие: Высокое |
| ИДЕНТИФИКАТОР CWE : 135 |
Array access out of bounds | Destination buffer overflow in string manipulation | Find defects (-checkers) | Invalid use of standard library routine | Invalid use of standard library string routine | Pointer access out of bounds | Unreliable cast of function pointer | Wrong allocated object size for cast