summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoy Marples <roy@marples.name>2008-03-26 15:10:26 +0000
committerRoy Marples <roy@marples.name>2008-03-26 15:10:26 +0000
commitcee3ccc4c10e8ba0d1635dd95d8e491435d130bc (patch)
treeacd59a491467d86d5f9a909a7fab02b64c20a0d4
parentf90f2914b927d303d219fb2862f0dbf868be17a3 (diff)
downloadopenrc-cee3ccc4c10e8ba0d1635dd95d8e491435d130bc.tar.gz
openrc-cee3ccc4c10e8ba0d1635dd95d8e491435d130bc.tar.bz2
openrc-cee3ccc4c10e8ba0d1635dd95d8e491435d130bc.tar.xz
Fix a segfault if rc.conf does not exist, Gentoo #214887
-rw-r--r--src/librc/librc-misc.c3
-rw-r--r--src/rc/rc-misc.c22
2 files changed, 16 insertions, 9 deletions
diff --git a/src/librc/librc-misc.c b/src/librc/librc-misc.c
index 5c7e366..25d230c 100644
--- a/src/librc/librc-misc.c
+++ b/src/librc/librc-misc.c
@@ -203,6 +203,9 @@ char *rc_config_value(RC_STRINGLIST *list, const char *entry)
RC_STRING *line;
char *p;
+ if (!list)
+ return NULL;
+
TAILQ_FOREACH(line, list, entries) {
p = strchr(line->value, '=');
if (p &&
diff --git a/src/rc/rc-misc.c b/src/rc/rc-misc.c
index e802ee4..42d9e53 100644
--- a/src/rc/rc-misc.c
+++ b/src/rc/rc-misc.c
@@ -79,20 +79,24 @@ char *rc_conf_value(const char *setting)
if (exists(RC_CONF_OLD)) {
old = rc_config_load(RC_CONF_OLD);
if (old) {
- TAILQ_CONCAT(rc_conf, old, entries);
- free(old);
+ if (rc_conf) {
+ TAILQ_CONCAT(rc_conf, old, entries);
+ free(old);
+ } else
+ rc_conf = old;
}
}
/* Convert old uppercase to lowercase */
- TAILQ_FOREACH(s, rc_conf, entries) {
- p = s->value;
- while (p && *p && *p != '=') {
- if (isupper((int) *p))
- *p = tolower((int) *p);
- p++;
+ if (rc_conf)
+ TAILQ_FOREACH(s, rc_conf, entries) {
+ p = s->value;
+ while (p && *p && *p != '=') {
+ if (isupper((int) *p))
+ *p = tolower((int) *p);
+ p++;
+ }
}
- }
}
return rc_config_value(rc_conf, setting);