[Homeros] исправленный RHVoice

Дмитрий Падучих dpaduch на k66.ru
Пн Янв 31 07:00:14 UTC 2011


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