Valgrind reports: ==3642987== Conditional jump or move depends on uninitialised value(s) ==3642987== at 0x491F268: TranslateNumber_1 (numbers.c:1785) ==3642987== by 0x4923C35: TranslateNumber (numbers.c:2080) ==3642987== by 0x49556DC: TranslateWord3 (translate.c:644) ==3642987== by 0x4957FCE: TranslateWord (translate.c:1100) ==3642987== by 0x4959344: TranslateWord2 (translate.c:1361) ==3642987== by 0x496116E: TranslateClause (translate.c:2613) ==3642987== by 0x494FF7A: SpeakNextClause (synthesize.c:1569) ==3642987== by 0x4939B9D: Synthesize (speech.c:457) ==3642987== by 0x493AE6A: sync_espeak_Synth (speech.c:570) ==3642987== by 0x493B286: espeak_ng_Synthesize (speech.c:678) ==3642987== by 0x4916925: espeak_Synth (espeak_api.c:90) ==3642987== by 0x10CF5D: main (espeak-ng.c:691) ==3642987== Uninitialised value was created by a stack allocation ==3642987== at 0x495BD9F: TranslateClause (translate.c:1941) Indeed, TranslateNumber_1 looks back up to three bytes before, with IsDigit09(word[-3])), so we have to increase the heading margin to three spaces.master
if (n_digits > 4) { | if (n_digits > 4) { | ||||
// word is entirely digits, insert commas and break into 3 digit "words" | // word is entirely digits, insert commas and break into 3 digit "words" | ||||
number_buf[0] = ' '; | number_buf[0] = ' '; | ||||
pn = &number_buf[1]; | |||||
number_buf[1] = ' '; | |||||
number_buf[2] = ' '; | |||||
pn = &number_buf[3]; | |||||
nx = n_digits; | nx = n_digits; | ||||
nw = 0; | nw = 0; | ||||
pn[16] = 0; | pn[16] = 0; | ||||
nw = 0; | nw = 0; | ||||
for (pw = &number_buf[1]; pw < pn;) { | |||||
for (pw = &number_buf[3]; pw < pn;) { | |||||
// keep wflags for each part, for FLAG_HYPHEN_AFTER | // keep wflags for each part, for FLAG_HYPHEN_AFTER | ||||
dict_flags = TranslateWord2(tr, pw, &num_wtab[nw++], words[ix].pre_pause); | dict_flags = TranslateWord2(tr, pw, &num_wtab[nw++], words[ix].pre_pause); | ||||
while (*pw++ != ' ') | while (*pw++ != ' ') |