[Homeros] исправленный RHVoice
Дмитрий Падучих
dpaduch на k66.ru
Пн Янв 31 08:03:50 UTC 2011
Ага, понятно. Во flite почему-то вместо sprintf используется обёртка
cst_sprintf, которая просто вызывает vsprintf. cppcheck ничего не знает
про cst_sprintf и потому молчит.
Я писал:
ДП> Olga Yakovleva:
OY>> Причина оказалась в одной из функций Flite, которую я вызывала. Я
OY>> заглянула в их исходники, и оказалось, что объединение списка строк в
OY>> одну строку реализуется примерно так: для каждого элемента списка
OY>> выполняется вызов
OY>> sprintf(результат, "%s%s", результат, элемент)
OY>> Согласно документации, при этом поведение sprintf не определено.
OY>> Интересно различное поведение на разных дистрибутивах.
ДП> В debian unstable, похоже, такого нет. Flite 1.4-release-2. cppcheck не
ДП> сообщает о проблеме со sprintf, хотя вообще-то он её замечает:
ДП> $ cppcheck test.c
ДП> Checking test.c...
ДП> [test.c:6]: (error) Undefined behaviour: s is used wrong in call to sprintf or snprintf. Quote: If copying takes place between objects that overlap as a result of a call to sprintf() or snprintf(), the results are undefined.
--
Дмитрий Падучих
Подробная информация о списке рассылки Homeros