core: escape spaces in paths during serialization
Otherwise we split them incorrectly when deserializing them. Resolves: #30747
This commit is contained in:
committed by
Yu Watanabe
parent
b82b4d258e
commit
d7942fe5fc
@@ -1930,7 +1930,7 @@ static int exec_context_serialize(const ExecContext *c, FILE *f) {
|
||||
FOREACH_ARRAY(i, c->directories[dt].items, c->directories[dt].n_items) {
|
||||
_cleanup_free_ char *path_escaped = NULL;
|
||||
|
||||
path_escaped = shell_escape(i->path, ":");
|
||||
path_escaped = shell_escape(i->path, ":" WHITESPACE);
|
||||
if (!path_escaped)
|
||||
return log_oom_debug();
|
||||
|
||||
@@ -1943,7 +1943,7 @@ static int exec_context_serialize(const ExecContext *c, FILE *f) {
|
||||
STRV_FOREACH(d, i->symlinks) {
|
||||
_cleanup_free_ char *link_escaped = NULL;
|
||||
|
||||
link_escaped = shell_escape(*d, ":");
|
||||
link_escaped = shell_escape(*d, ":" WHITESPACE);
|
||||
if (!link_escaped)
|
||||
return log_oom_debug();
|
||||
|
||||
@@ -2264,11 +2264,11 @@ static int exec_context_serialize(const ExecContext *c, FILE *f) {
|
||||
FOREACH_ARRAY(mount, c->bind_mounts, c->n_bind_mounts) {
|
||||
_cleanup_free_ char *src_escaped = NULL, *dst_escaped = NULL;
|
||||
|
||||
src_escaped = shell_escape(mount->source, ":");
|
||||
src_escaped = shell_escape(mount->source, ":" WHITESPACE);
|
||||
if (!src_escaped)
|
||||
return log_oom_debug();
|
||||
|
||||
dst_escaped = shell_escape(mount->destination, ":");
|
||||
dst_escaped = shell_escape(mount->destination, ":" WHITESPACE);
|
||||
if (!dst_escaped)
|
||||
return log_oom_debug();
|
||||
|
||||
@@ -2455,11 +2455,11 @@ static int exec_context_serialize(const ExecContext *c, FILE *f) {
|
||||
FOREACH_ARRAY(mount, c->mount_images, c->n_mount_images) {
|
||||
_cleanup_free_ char *s = NULL, *source_escaped = NULL, *dest_escaped = NULL;
|
||||
|
||||
source_escaped = shell_escape(mount->source, " ");
|
||||
source_escaped = shell_escape(mount->source, WHITESPACE);
|
||||
if (!source_escaped)
|
||||
return log_oom_debug();
|
||||
|
||||
dest_escaped = shell_escape(mount->destination, " ");
|
||||
dest_escaped = shell_escape(mount->destination, WHITESPACE);
|
||||
if (!dest_escaped)
|
||||
return log_oom_debug();
|
||||
|
||||
@@ -2496,7 +2496,7 @@ static int exec_context_serialize(const ExecContext *c, FILE *f) {
|
||||
FOREACH_ARRAY(mount, c->extension_images, c->n_extension_images) {
|
||||
_cleanup_free_ char *s = NULL, *source_escaped = NULL;
|
||||
|
||||
source_escaped = shell_escape(mount->source, ":");
|
||||
source_escaped = shell_escape(mount->source, ":" WHITESPACE);
|
||||
if (!source_escaped)
|
||||
return log_oom_debug();
|
||||
|
||||
@@ -2847,7 +2847,8 @@ static int exec_context_deserialize(ExecContext *c, FILE *f) {
|
||||
_cleanup_free_ char *tuple = NULL, *path = NULL, *only_create = NULL;
|
||||
const char *p;
|
||||
|
||||
r = extract_first_word(&val, &tuple, WHITESPACE, EXTRACT_RETAIN_ESCAPE);
|
||||
/* Use EXTRACT_UNESCAPE_RELAX here, as we unescape the colons in subsequent calls */
|
||||
r = extract_first_word(&val, &tuple, WHITESPACE, EXTRACT_UNESCAPE_SEPARATORS|EXTRACT_UNESCAPE_RELAX);
|
||||
if (r < 0)
|
||||
return r;
|
||||
if (r == 0)
|
||||
|
||||
Reference in New Issue
Block a user