Действительно, как упомянул @AlexLop, в библиотеке существует множество случаев такого рода неопределенного поведения.
Быстрый тест с Frama-C показывает некоторые случаи появления \pointer_comparable
сигналов тревоги.Помимо прочего, эти аварийные сигналы указывают на использование операторов сравнения между различными объектами, например UB.
Например, при запуске следующей команды:
frama-c-gui safeclib/*.c unittests/test_strncpy_s.c -main test_strncpy_s \
-cpp-extra-args="-Iinclude" -eva -eva-precision 3
Показывает ли в графическом интерфейсе, что естьнесколько стеков вызовов, в которых сравниваются указатели из str1
и str2
(хотя по крайней мере в одном стеков вызовов указатели указывают на одну и ту же глобальную переменную, поэтому в этом случае она действительна).