For the case when word is smaller than 4 characters, we should not look at the 3rd or 4th character before checking the previous ones, otherwise we'd at best read uninitialized data, at worse non-existing data.master
| @@ -1719,13 +1719,14 @@ static bool CheckThousandsGroup(char *word, int group_len) | |||
| // Is this a group of 3 digits which looks like a thousands group? | |||
| int ix; | |||
| if (IsDigit09(word[group_len]) || IsDigit09(-1)) | |||
| return false; | |||
| for (ix = 0; ix < group_len; ix++) { | |||
| if (!IsDigit09(word[ix])) | |||
| return false; | |||
| } | |||
| if (IsDigit09(word[group_len]) || IsDigit09(-1)) | |||
| return false; | |||
| return true; | |||
| } | |||
| @@ -83,3 +83,6 @@ test_phon en "r'oUlIN 0nD@ fl'o@ l'aafIN" "🤣" # skip words | |||
| # bug: https://github.com/espeak-ng/espeak-ng/issues/471 | |||
| test_phon sk "sm'eju:tsa s'a tv'a:R" "☺" | |||
| test_phon sk "bl'ax sm'eju:tsa s'a tv'a:R" "blah ☺" | |||
| # https://github.com/espeak-ng/espeak-ng/pull/1148 | |||
| test_phon fr "dY mil v'E~" "2020" | |||