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
| @@ -212,7 +212,8 @@ int LoadDictionary(Translator *tr, const char *name, int no_error) | |||
| int size; | |||
| 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); | |||
| // Load a pronunciation data file into memory | |||