| @@ -250,6 +250,8 @@ else | |||
| ]) | |||
| fi | |||
| AC_CHECK_HEADERS([valgrind/memcheck.h]) | |||
| if test "$with_async" = "no" ; then | |||
| have_async=no | |||
| else | |||
| @@ -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(); | |||
| @@ -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++) | |||
| @@ -23,6 +23,21 @@ | |||
| #include <endian.h> // for BYTE_ORDER, BIG_ENDIAN | |||
| #include <espeak-ng/espeak_ng.h> | |||
| #if defined(__has_feature) | |||
| # if __has_feature(memory_sanitizer) | |||
| # include <sanitizer/msan_interface.h> | |||
| # define MAKE_MEM_UNDEFINED(addr, len) __msan_unpoison(addr, len) | |||
| # endif | |||
| #endif | |||
| #ifndef MAKE_MEM_UNDEFINED | |||
| # ifdef HAVE_VALGRIND_MEMCHECK_H | |||
| # include <valgrind/memcheck.h> | |||
| # 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" | |||
| @@ -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; | |||
| } | |||