From b457d6f58ef645e2cab812a054a4c288b5139f38 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Sun, 20 Mar 2022 00:27:41 +0100 Subject: [PATCH] Fix uninitialized fields The memory sanitizer would complain: ==4157154==WARNING: MemorySanitizer: use-of-uninitialized-value #0 0x7fc191d0a85b in TranslateWord3 /home/samy/brl/speech/espeak-ng-git/src/libespeak-ng/translate.c:1065:7 #1 0x7fc191d02916 in TranslateWord /home/samy/brl/speech/espeak-ng-git/src/libespeak-ng/translate.c:1100:14 #2 0x7fc191d1b324 in TranslateWord2 /home/samy/brl/speech/espeak-ng-git/src/libespeak-ng/translate.c:1448:15 #3 0x7fc191d14ebc in TranslateClause /home/samy/brl/speech/espeak-ng-git/src/libespeak-ng/translate.c:2623:17 #4 0x7fc191cfbc9b in SpeakNextClause /home/samy/brl/speech/espeak-ng-git/src/libespeak-ng/synthesize.c:1569:2 #5 0x7fc191cd52fc in Synthesize /home/samy/brl/speech/espeak-ng-git/src/libespeak-ng/speech.c:457:2 #6 0x7fc191cd6d7c in sync_espeak_Synth /home/samy/brl/speech/espeak-ng-git/src/libespeak-ng/speech.c:570:29 #7 0x7fc191cd6d7c in espeak_ng_Synthesize /home/samy/brl/speech/espeak-ng-git/src/libespeak-ng/speech.c:678:10 #8 0x7fc191ca0340 in espeak_Synth /home/samy/brl/speech/espeak-ng-git/src/libespeak-ng/espeak_api.c:90:32 #9 0x4a4381 in main /home/samy/brl/speech/espeak-ng-git/src/espeak-ng.c:691:3 #10 0x7fc19168b7fc in __libc_start_main csu/../csu/libc-start.c:332:16 #11 0x421449 in _start (/home/samy/ens/projet/1/speech/espeak-ng-git/src/.libs/espeak-ng+0x421449) Uninitialized value was created by a heap allocation #0 0x45000d in malloc (/home/samy/ens/projet/1/speech/espeak-ng-git/src/.libs/espeak-ng+0x45000d) #1 0x7fc191d1ca29 in NewTranslator /home/samy/brl/speech/espeak-ng-git/src/libespeak-ng/tr_languages.c:242:26 #2 0x7fc191d1ca29 in SelectTranslator /home/samy/brl/speech/espeak-ng-git/src/libespeak-ng/tr_languages.c:482:7 (and similar for expect_verb_sn expect_noun, expect_past, clause_upper_count, clause_lower_count) Indeed TranslateWord3 doesn't always initialize these fields. Better just initialize them directly from the Translator creation. --- src/libespeak-ng/tr_languages.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/libespeak-ng/tr_languages.c b/src/libespeak-ng/tr_languages.c index b8d91b1d..78d28952 100644 --- a/src/libespeak-ng/tr_languages.c +++ b/src/libespeak-ng/tr_languages.c @@ -256,6 +256,14 @@ static Translator *NewTranslator(void) tr->transpose_map = transpose_map_latin; tr->frequent_pairs = NULL; + tr->expect_verb = 0; + tr->expect_past = 0; + tr->expect_verb_s = 0; + tr->expect_noun = 0; + + tr->clause_upper_count = 0; + tr->clause_lower_count = 0; + // only need lower case tr->letter_bits_offset = 0; memset(tr->letter_bits, 0, sizeof(tr->letter_bits));