diff --git a/configure.ac b/configure.ac index 098bf601..84caec35 100644 --- a/configure.ac +++ b/configure.ac @@ -250,6 +250,8 @@ else ]) fi +AC_CHECK_HEADERS([valgrind/memcheck.h]) + if test "$with_async" = "no" ; then have_async=no else diff --git a/src/libespeak-ng/compiledata.c b/src/libespeak-ng/compiledata.c index ef95c00a..319d23b8 100644 --- a/src/libespeak-ng/compiledata.c +++ b/src/libespeak-ng/compiledata.c @@ -2608,7 +2608,12 @@ espeak_ng_CompilePhonemeDataPath(long rate, memset(ref_hash_tab, 0, sizeof(ref_hash_tab)); n_phoneme_tabs = 0; + MAKE_MEM_UNDEFINED(&n_phcodes_list, sizeof(n_phcodes_list)); + MAKE_MEM_UNDEFINED(&phoneme_tab_list2, sizeof(phoneme_tab_list2)); + stack_ix = 0; + MAKE_MEM_UNDEFINED(&stack, sizeof(stack)); + StartPhonemeTable("base"); CompilePhonemeFiles(); diff --git a/src/libespeak-ng/readclause.c b/src/libespeak-ng/readclause.c index de6cea56..e8dbc57d 100644 --- a/src/libespeak-ng/readclause.c +++ b/src/libespeak-ng/readclause.c @@ -997,7 +997,9 @@ void InitText2(void) ungot_char2 = 0; n_ssml_stack = 1; + MAKE_MEM_UNDEFINED(&ssml_stack[1], sizeof(ssml_stack) - sizeof(ssml_stack[0])); n_param_stack = 1; + MAKE_MEM_UNDEFINED(¶m_stack[1], sizeof(param_stack) - sizeof(param_stack[0])); ssml_stack[0].tag_type = 0; for (param = 0; param < N_SPEECH_PARAM; param++) diff --git a/src/libespeak-ng/speech.h b/src/libespeak-ng/speech.h index 31a7aa9c..5e2433b5 100644 --- a/src/libespeak-ng/speech.h +++ b/src/libespeak-ng/speech.h @@ -23,6 +23,21 @@ #include // for BYTE_ORDER, BIG_ENDIAN #include +#if defined(__has_feature) +# if __has_feature(memory_sanitizer) +# include +# define MAKE_MEM_UNDEFINED(addr, len) __msan_unpoison(addr, len) +# endif +#endif + +#ifndef MAKE_MEM_UNDEFINED +# ifdef HAVE_VALGRIND_MEMCHECK_H +# include +# define MAKE_MEM_UNDEFINED(addr, len) VALGRIND_MAKE_MEM_UNDEFINED(addr, len) +# else +# define MAKE_MEM_UNDEFINED(addr, len) ((void) (addr, len)) +# endif +#endif #ifdef __cplusplus extern "C" diff --git a/src/libespeak-ng/wavegen.c b/src/libespeak-ng/wavegen.c index 2b3ede27..9441f201 100644 --- a/src/libespeak-ng/wavegen.c +++ b/src/libespeak-ng/wavegen.c @@ -45,6 +45,7 @@ #endif #include "sintab.h" +#include "speech.h" static void SetSynth(int length, int modn, frame_t *fr1, frame_t *fr2, voice_t *v); @@ -271,6 +272,7 @@ void WcmdqInc() static void WcmdqIncHead() { + MAKE_MEM_UNDEFINED(&wcmdq[wcmdq_head], sizeof(wcmdq[wcmdq_head])); wcmdq_head++; if (wcmdq_head >= N_WCMDQ) wcmdq_head = 0; }