[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