diff options
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/load-fragment.c | 51 | ||||
-rw-r--r-- | src/core/manager.c | 6 | ||||
-rw-r--r-- | src/core/mount.c | 8 | ||||
-rw-r--r-- | src/core/swap.c | 3 | ||||
-rw-r--r-- | src/core/umount.c | 38 |
5 files changed, 51 insertions, 55 deletions
diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c index 07384d3668..e61418db50 100644 --- a/src/core/load-fragment.c +++ b/src/core/load-fragment.c @@ -507,16 +507,17 @@ int config_parse_exec_oom_score_adjust(const char* unit, return 0; } -int config_parse_exec(const char *unit, - const char *filename, - unsigned line, - const char *section, - unsigned section_line, - const char *lvalue, - int ltype, - const char *rvalue, - void *data, - void *userdata) { +int config_parse_exec( + const char *unit, + const char *filename, + unsigned line, + const char *section, + unsigned section_line, + const char *lvalue, + int ltype, + const char *rvalue, + void *data, + void *userdata) { ExecCommand **e = data, *nce; char *path, **n; @@ -568,15 +569,13 @@ int config_parse_exec(const char *unit, word ++; } } - } else - if (strneq(word, ";", MAX(l, 1U))) + } else if (strneq(word, ";", MAX(l, 1U))) goto found; k++; } if (!isempty(state)) { - log_syntax(unit, LOG_ERR, filename, line, EINVAL, - "Trailing garbage, ignoring."); + log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Trailing garbage, ignoring."); return 0; } @@ -605,9 +604,10 @@ int config_parse_exec(const char *unit, else skip = strneq(word, "\\;", MAX(l, 1U)); - c = cunescape_length(word + skip, l - skip); - if (!c) { - r = log_oom(); + r = cunescape_length(word + skip, l - skip, 0, &c); + if (r < 0) { + log_syntax(unit, LOG_ERR, filename, line, r, "Failed to unescape command line, ignoring: %s", rvalue); + r = 0; goto fail; } @@ -637,8 +637,7 @@ int config_parse_exec(const char *unit, else goto ok; - log_syntax(unit, LOG_ERR, filename, line, EINVAL, - "%s, ignoring: %s", reason, rvalue); + log_syntax(unit, LOG_ERR, filename, line, EINVAL, "%s, ignoring: %s", reason, rvalue); r = 0; goto fail; @@ -1976,8 +1975,7 @@ int config_parse_environ(const char *unit, if (u) { r = unit_full_printf(u, rvalue, &k); if (r < 0) - log_syntax(unit, LOG_ERR, filename, line, -r, - "Failed to resolve specifiers, ignoring: %s", rvalue); + log_syntax(unit, LOG_ERR, filename, line, -r, "Failed to resolve specifiers, ignoring: %s", rvalue); } if (!k) @@ -1989,13 +1987,14 @@ int config_parse_environ(const char *unit, _cleanup_free_ char *n; char **x; - n = cunescape_length(word, l); - if (!n) - return log_oom(); + r = cunescape_length(word, l, 0, &n); + if (r < 0) { + log_syntax(unit, LOG_ERR, filename, line, r, "Couldn't unescape assignment, ignoring: %s", rvalue); + continue; + } if (!env_assignment_is_valid(n)) { - log_syntax(unit, LOG_ERR, filename, line, EINVAL, - "Invalid environment assignment, ignoring: %s", rvalue); + log_syntax(unit, LOG_ERR, filename, line, EINVAL, "Invalid environment assignment, ignoring: %s", rvalue); continue; } diff --git a/src/core/manager.c b/src/core/manager.c index 73417ab1a8..1c912fcdf7 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -2426,11 +2426,9 @@ int manager_deserialize(Manager *m, FILE *f, FDSet *fds) { _cleanup_free_ char *uce = NULL; char **e; - uce = cunescape(l+4); - if (!uce) { - r = -ENOMEM; + r = cunescape(l + 4, UNESCAPE_RELAX, &uce); + if (r < 0) goto finish; - } e = strv_env_set(m->environment, uce); if (!e) { diff --git a/src/core/mount.c b/src/core/mount.c index 53594cd40b..c4aa810d05 100644 --- a/src/core/mount.c +++ b/src/core/mount.c @@ -1579,7 +1579,7 @@ static int mount_load_proc_self_mountinfo(Manager *m, bool set_flags) { r = 0; for (;;) { const char *device, *path, *options, *fstype; - _cleanup_free_ const char *d = NULL, *p = NULL; + _cleanup_free_ char *d = NULL, *p = NULL; struct libmnt_fs *fs; int k; @@ -1594,12 +1594,10 @@ static int mount_load_proc_self_mountinfo(Manager *m, bool set_flags) { options = mnt_fs_get_options(fs); fstype = mnt_fs_get_fstype(fs); - d = cunescape(device); - if (!d) + if (cunescape(device, UNESCAPE_RELAX, &d) < 0) return log_oom(); - p = cunescape(path); - if (!p) + if (cunescape(path, UNESCAPE_RELAX, &p) < 0) return log_oom(); (void) device_found_node(m, d, true, DEVICE_FOUND_MOUNT, set_flags); diff --git a/src/core/swap.c b/src/core/swap.c index 6b1bdb5c1e..53f127484f 100644 --- a/src/core/swap.c +++ b/src/core/swap.c @@ -1099,8 +1099,7 @@ static int swap_load_proc_swaps(Manager *m, bool set_flags) { continue; } - d = cunescape(dev); - if (!d) + if (cunescape(dev, UNESCAPE_RELAX, &d) < 0) return log_oom(); device_found_node(m, d, true, DEVICE_FOUND_SWAP, set_flags); diff --git a/src/core/umount.c b/src/core/umount.c index ceee70fbea..bee267a5ad 100644 --- a/src/core/umount.c +++ b/src/core/umount.c @@ -62,6 +62,7 @@ static void mount_points_list_free(MountPoint **head) { static int mount_points_list_get(MountPoint **head) { _cleanup_fclose_ FILE *proc_self_mountinfo = NULL; unsigned int i; + int r; assert(head); @@ -97,9 +98,9 @@ static int mount_points_list_get(MountPoint **head) { continue; } - p = cunescape(path); - if (!p) - return -ENOMEM; + r = cunescape(path, UNESCAPE_RELAX, &p); + if (r < 0) + return r; /* Ignore mount points we can't unmount because they * are API or because we are keeping them open (like @@ -133,10 +134,12 @@ static int mount_points_list_get(MountPoint **head) { static int swap_list_get(MountPoint **head) { _cleanup_fclose_ FILE *proc_swaps = NULL; unsigned int i; + int r; assert(head); - if (!(proc_swaps = fopen("/proc/swaps", "re"))) + proc_swaps = fopen("/proc/swaps", "re"); + if (!proc_swaps) return (errno == ENOENT) ? 0 : -errno; (void) fscanf(proc_swaps, "%*s %*s %*s %*s %*s\n"); @@ -146,19 +149,19 @@ static int swap_list_get(MountPoint **head) { char *dev = NULL, *d; int k; - if ((k = fscanf(proc_swaps, - "%ms " /* device/file */ - "%*s " /* type of swap */ - "%*s " /* swap size */ - "%*s " /* used */ - "%*s\n", /* priority */ - &dev)) != 1) { + k = fscanf(proc_swaps, + "%ms " /* device/file */ + "%*s " /* type of swap */ + "%*s " /* swap size */ + "%*s " /* used */ + "%*s\n", /* priority */ + &dev); + if (k != 1) { if (k == EOF) break; log_warning("Failed to parse /proc/swaps:%u.", i); - free(dev); continue; } @@ -168,14 +171,13 @@ static int swap_list_get(MountPoint **head) { continue; } - d = cunescape(dev); + r = cunescape(dev, UNESCAPE_RELAX, &d); free(dev); + if (r < 0) + return r; - if (!d) { - return -ENOMEM; - } - - if (!(swap = new0(MountPoint, 1))) { + swap = new0(MountPoint, 1); + if (!swap) { free(d); return -ENOMEM; } |