Browse Source

Fix out-of-bound access

IsLetterGroup looks for heading \0, so the padding also needs to include
an \0.
master
Samuel Thibault 3 years ago
parent
commit
eed7db1575
1 changed files with 6 additions and 4 deletions
  1. 6
    4
      src/libespeak-ng/dictionary.c

+ 6
- 4
src/libespeak-ng/dictionary.c View File

@@ -3010,12 +3010,14 @@ int Lookup(Translator *tr, const char *word, char *ph_out)
if (flags[0] & FLAG_TEXTMODE) {
say_as = option_sayas;
option_sayas = 0; // don't speak replacement word as letter names
// NOTE: TranslateRoman checks text[-2], so pad the start of text to prevent
// NOTE: TranslateRoman checks text[-2] and IsLetterGroup looks
// for a heading \0, so pad the start of text to prevent
// it reading data on the stack.
text[0] = ' ';
text[0] = 0;
text[1] = ' ';
strncpy0(text+2, word1, sizeof(text)-2);
flags0 = TranslateWord(tr, text+2, NULL, NULL);
text[2] = ' ';
strncpy0(text+3, word1, sizeof(text)-3);
flags0 = TranslateWord(tr, text+3, NULL, NULL);
strcpy(ph_out, word_phonemes);
option_sayas = say_as;
}

Loading…
Cancel
Save