compiledict.c sets dict_name to dictionary_name if dict_name is not set, and passes that to LoadDictionary. LoadDictionary then copies the passed in name to dictionary_name. This causes -fsanitize=address to fail with overlapping memory addresses passed to strncpy (copying the string to itself). As such, don't copy the name in this case.master
int size; | int size; | ||||
char fname[sizeof(path_home)+20]; | char fname[sizeof(path_home)+20]; | ||||
strncpy(dictionary_name, name, 40); // currently loaded dictionary name | |||||
if (dictionary_name != name) | |||||
strncpy(dictionary_name, name, 40); // currently loaded dictionary name | |||||
strncpy(tr->dictionary_name, name, 40); | strncpy(tr->dictionary_name, name, 40); | ||||
// Load a pronunciation data file into memory | // Load a pronunciation data file into memory |