diff options
-rw-r--r-- | ext/pspell/pspell.c | 57 |
1 files changed, 33 insertions, 24 deletions
diff --git a/ext/pspell/pspell.c b/ext/pspell/pspell.c index 478d6ad9e5..c9e5b806a2 100644 --- a/ext/pspell/pspell.c +++ b/ext/pspell/pspell.c @@ -186,16 +186,19 @@ static PHP_FUNCTION(pspell_new) * pointing to the location of the dictionaries */ if(0 == RegOpenKey(HKEY_LOCAL_MACHINE, "Software\\Aspell", &hkey)) { + LONG result; dwLen = sizeof(aspell_dir) - 1; - RegQueryValueEx(hkey, "", NULL, &dwType, (LPBYTE)&aspell_dir, &dwLen); + result = RegQueryValueEx(hkey, "", NULL, &dwType, (LPBYTE)&aspell_dir, &dwLen); RegCloseKey(hkey); - strcpy(data_dir, aspell_dir); - strcat(data_dir, "\\data"); - strcpy(dict_dir, aspell_dir); - strcat(dict_dir, "\\dict"); - - pspell_config_replace(config, "data-dir", data_dir); - pspell_config_replace(config, "dict-dir", dict_dir); + if(result == ERROR_SUCCESS) { + strlcpy(data_dir, aspell_dir, sizeof(data_dir)); + strlcat(data_dir, "\\data", sizeof(data_dir)); + strlcpy(dict_dir, aspell_dir, sizeof(dict_dir)); + strlcat(dict_dir, "\\dict", sizeof(dict_dir)); + + pspell_config_replace(config, "data-dir", data_dir); + pspell_config_replace(config, "dict-dir", dict_dir); + } } #endif @@ -291,16 +294,19 @@ static PHP_FUNCTION(pspell_new_personal) * pointing to the location of the dictionaries */ if(0 == RegOpenKey(HKEY_LOCAL_MACHINE, "Software\\Aspell", &hkey)) { + LONG result; dwLen = sizeof(aspell_dir) - 1; - RegQueryValueEx(hkey, "", NULL, &dwType, (LPBYTE)&aspell_dir, &dwLen); + result = RegQueryValueEx(hkey, "", NULL, &dwType, (LPBYTE)&aspell_dir, &dwLen); RegCloseKey(hkey); - strcpy(data_dir, aspell_dir); - strcat(data_dir, "\\data"); - strcpy(dict_dir, aspell_dir); - strcat(dict_dir, "\\dict"); - - pspell_config_replace(config, "data-dir", data_dir); - pspell_config_replace(config, "dict-dir", dict_dir); + if(result == ERROR_SUCCESS) { + strlcpy(data_dir, aspell_dir, sizeof(data_dir)); + strlcat(data_dir, "\\data", sizeof(data_dir)); + strlcpy(dict_dir, aspell_dir, sizeof(dict_dir)); + strlcat(dict_dir, "\\dict", sizeof(dict_dir)); + + pspell_config_replace(config, "data-dir", data_dir); + pspell_config_replace(config, "dict-dir", dict_dir); + } } #endif @@ -649,16 +655,19 @@ static PHP_FUNCTION(pspell_config_create) * pointing to the location of the dictionaries */ if(0 == RegOpenKey(HKEY_LOCAL_MACHINE, "Software\\Aspell", &hkey)) { + LONG result; dwLen = sizeof(aspell_dir) - 1; - RegQueryValueEx(hkey, "", NULL, &dwType, (LPBYTE)&aspell_dir, &dwLen); + result = RegQueryValueEx(hkey, "", NULL, &dwType, (LPBYTE)&aspell_dir, &dwLen); RegCloseKey(hkey); - strcpy(data_dir, aspell_dir); - strcat(data_dir, "\\data"); - strcpy(dict_dir, aspell_dir); - strcat(dict_dir, "\\dict"); - - pspell_config_replace(config, "data-dir", data_dir); - pspell_config_replace(config, "dict-dir", dict_dir); + if(result == ERROR_SUCCESS) { + strlcpy(data_dir, aspell_dir, sizeof(data_dir)); + strlcat(data_dir, "\\data", sizeof(data_dir)); + strlcpy(dict_dir, aspell_dir, sizeof(dict_dir)); + strlcat(dict_dir, "\\dict", sizeof(dict_dir)); + + pspell_config_replace(config, "data-dir", data_dir); + pspell_config_replace(config, "dict-dir", dict_dir); + } } #endif |