summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorReuben Thomas <rrt@sc3d.org>2017-07-31 22:51:11 +0200
committerReuben Thomas <rrt@sc3d.org>2017-07-31 22:51:39 +0200
commit78665644c42e7a74acdf151cd0b30688ce4530ad (patch)
tree7dc58748babce0eeb87b8ecf3460382d2d177131 /src
parentc268692a64cbfb3edf38b99ce57e2e83dff47bfd (diff)
downloadenchant-78665644c42e7a74acdf151cd0b30688ce4530ad.tar.gz
Deal with strdup failure in enchant_relocate
Diffstat (limited to 'src')
-rw-r--r--src/lib.c32
1 files changed, 26 insertions, 6 deletions
diff --git a/src/lib.c b/src/lib.c
index c571a0d..0302e26 100644
--- a/src/lib.c
+++ b/src/lib.c
@@ -124,16 +124,35 @@ enchant_get_user_config_dir (void)
GSList *
enchant_get_conf_dirs (void)
{
- GSList *conf_dirs = g_slist_append (NULL, enchant_relocate (PKGDATADIR));
-
- char *sysconfdir = enchant_relocate (SYSCONFDIR);
- char *pkgconfdir = g_build_filename (sysconfdir, "enchant", NULL);
+ GSList *conf_dirs = NULL;
+ char *pkgdatadir = NULL;
+ char *sysconfdir = NULL;
+ char *pkgconfdir = NULL;
+ char *user_config_dir = NULL;
+
+ if ((pkgdatadir = enchant_relocate (PKGDATADIR)) == NULL)
+ goto error_exit;
+ conf_dirs = g_slist_append (conf_dirs, pkgdatadir);
+
+ if ((sysconfdir = enchant_relocate (SYSCONFDIR)) == NULL)
+ goto error_exit;
+ if ((pkgconfdir = g_build_filename (sysconfdir, "enchant", NULL)) == NULL)
+ goto error_exit;
conf_dirs = g_slist_append (conf_dirs, pkgconfdir);
free (sysconfdir);
- conf_dirs = g_slist_append (conf_dirs, enchant_get_user_config_dir ());
+ if ((user_config_dir = enchant_get_user_config_dir ()) == NULL)
+ goto error_exit;
+ conf_dirs = g_slist_append (conf_dirs, user_config_dir);
return conf_dirs;
+
+ error_exit:
+ free (pkgdatadir);
+ free (sysconfdir);
+ free (pkgconfdir);
+ free (user_config_dir);
+ return NULL;
}
/********************************************************************************/
@@ -863,7 +882,8 @@ static void
enchant_load_providers (EnchantBroker * broker)
{
char *module_dir = enchant_relocate (PKGLIBDIR);
- enchant_load_providers_in_dir (broker, module_dir);
+ if (module_dir)
+ enchant_load_providers_in_dir (broker, module_dir);
free (module_dir);
}