-
- Я нифига не понял, POV как всегда -- никаких деталей, мол "не
работает" и всё тут. Что такое, например, src? Какая именно вообще
ошибка? Но баг уже виден невооружённым глазом, только видимо
другой. Если здесь snprintf используется для того, чтобы
скопировать строку, то нужно писать не snprintf(dest, maxsize,
src), а snprintf(dest, maxsize, "%s", src) или даже snprintf(dest,
maxsize, "%.*s", (int)src_size, src), последнее если размер src
известен, чтоб не вычислять заново. fk0(152 знак., 27.08.2020 11:55)
- Да работает всё. Мне предупреждение не нравится. Подставляемая
строка не считается за const char... POV_(314 знак., 27.08.2020 12:04,
)
- Ты не в теме. Если у функции аргумент объявлен const char*, то туда
разрешается передавать char*. В этом месте const означает, что
функция обязуется не менять объект по этому указателю. Фраза
"format string is not a string literal (potentially insecure)"
вполне себе недвусмысленная и понятная. Если тебе в ней что-то
непонятно, спрашивай. - SciFi(27.08.2020 12:17)
- Если в printf передать не статичную строку, а указатель - будет
ругань. А на что тут-то ругаться? Лежит себе строка во флешке и
лежит. То, что анализатор не считает это за строку
(инициализированную, замечу) - неправильно как-то... POV_(82 знак., 27.08.2020 12:47,
)
- Я ж тебе выше разжевал: если в строке будут всякие %s, %d, и
особенно %n -- получишь глюкодром. Поэтому QT и настаивает, что в
его варианте глюкодром исключается. - fk0(27.08.2020 13:25)
- Ничего разжёванного не вижу... POV_(547 знак., 27.08.2020 14:07,
)
- Как вариант, анализатор не умеет в инициализаторы вида { .foo = "bar" }. - SciFi(27.08.2020 14:09)
- Ничего разжёванного не вижу... POV_(547 знак., 27.08.2020 14:07,
- Строка, указатель, ругань. Это всё только тебе ведомо. Кода нет,
говорить не о чем. - SciFi(27.08.2020 12:53)
- Ок.. тогда так.. POV_(214 знак., 27.08.2020 12:57,
)
- В первом случае анализатор отследил, что str1 имеет значение,
заданное при инициализации, оно вменяемое, вопросов нет. Во втором
случае отследить значение нет возможности, вот он и предупредил
"ежели что, сам дурак". Отслеживает с особым пристрастием, потому
что это строка формата, при ошибках в ней будет глючить printf.
Логично же. - SciFi(27.08.2020 13:23)
- Да понятно, что логично. Непонятно отчего не доанализировалась
ситуация... POV_(254 знак., 27.08.2020 13:35,
)
- "Вполне себе доступная к пониманию как инициализированная строкой"
-- НЕ ВЕРЮ. Код, опять же, не приводишь, так что вот так вот. - SciFi(27.08.2020 13:39)
- Как выше написал, так и есть.. Только полей в структуре больше... POV_(2075 знак., 27.08.2020 13:53,
)
- Забей, нет желания твой код анализировать, тем более, что у тебя есть бездушная железка, занятая именно этим. А чтобы анализатор мог сделать вывод, что в printf пришла именно та строка, о которой ты думаешь, и по дороге никто не мог её поменять, в общем случае нужно много чего проверить, а не только тот огрызок кода, который ты привёл. - SciFi(27.08.2020 13:59)
- Как выше написал, так и есть.. Только полей в структуре больше... POV_(2075 знак., 27.08.2020 13:53,
- "Вполне себе доступная к пониманию как инициализированная строкой"
-- НЕ ВЕРЮ. Код, опять же, не приводишь, так что вот так вот. - SciFi(27.08.2020 13:39)
- Да понятно, что логично. Непонятно отчего не доанализировалась
ситуация... POV_(254 знак., 27.08.2020 13:35,
- В первом случае анализатор отследил, что str1 имеет значение,
заданное при инициализации, оно вменяемое, вопросов нет. Во втором
случае отследить значение нет возможности, вот он и предупредил
"ежели что, сам дурак". Отслеживает с особым пристрастием, потому
что это строка формата, при ошибках в ней будет глючить printf.
Логично же. - SciFi(27.08.2020 13:23)
- Ок.. тогда так.. POV_(214 знак., 27.08.2020 12:57,
- Я ж тебе выше разжевал: если в строке будут всякие %s, %d, и
особенно %n -- получишь глюкодром. Поэтому QT и настаивает, что в
его варианте глюкодром исключается. - fk0(27.08.2020 13:25)
- Если в printf передать не статичную строку, а указатель - будет
ругань. А на что тут-то ругаться? Лежит себе строка во флешке и
лежит. То, что анализатор не считает это за строку
(инициализированную, замечу) - неправильно как-то... POV_(82 знак., 27.08.2020 12:47,
- Ты не в теме. Если у функции аргумент объявлен const char*, то туда
разрешается передавать char*. В этом месте const означает, что
функция обязуется не менять объект по этому указателю. Фраза
"format string is not a string literal (potentially insecure)"
вполне себе недвусмысленная и понятная. Если тебе в ней что-то
непонятно, спрашивай. - SciFi(27.08.2020 12:17)
- Да работает всё. Мне предупреждение не нравится. Подставляемая
строка не считается за const char... POV_(314 знак., 27.08.2020 12:04,
- Я нифига не понял, POV как всегда -- никаких деталей, мол "не
работает" и всё тут. Что такое, например, src? Какая именно вообще
ошибка? Но баг уже виден невооружённым глазом, только видимо
другой. Если здесь snprintf используется для того, чтобы
скопировать строку, то нужно писать не snprintf(dest, maxsize,
src), а snprintf(dest, maxsize, "%s", src) или даже snprintf(dest,
maxsize, "%.*s", (int)src_size, src), последнее если размер src
известен, чтоб не вычислять заново. fk0(152 знак., 27.08.2020 11:55)