]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
systemctl: pecify read_full_file() size argument as NULL
authorLennart Poettering <lennart@poettering.net>
Wed, 17 Mar 2021 17:44:51 +0000 (18:44 +0100)
committerLennart Poettering <lennart@poettering.net>
Wed, 17 Mar 2021 17:44:51 +0000 (18:44 +0100)
If it is specified as NULL read_full_file() assumes the caller wants a C
string, and it looks for embedded NUL bytes to ensure that works. Given
we don#t actually use the size argument here, let's drop it.

(in one case the size argument is used, but not for actually processing
the full returned data, but just as a shortcut to compare things with
the original string. Let's drop use of that there, too given the risk of
embedded NUL bytes in the data read.)

src/systemctl/systemctl-edit.c

index 4186ec3aea76cd7822d2754c1a07c0d87344b9a5..7cb58c5208d37bab77ebe319075f70ceafc3fdbc 100644 (file)
@@ -146,7 +146,6 @@ static int create_edit_temp_file(const char *new_path, const char *original_path
                 _cleanup_free_ char *new_contents = NULL;
                 _cleanup_fclose_ FILE *f = NULL;
                 char **path;
-                size_t size;
 
                 r = mac_selinux_create_file_prepare(new_path, S_IFREG);
                 if (r < 0)
@@ -161,7 +160,7 @@ static int create_edit_temp_file(const char *new_path, const char *original_path
                 if (r < 0)
                         return log_error_errno(errno, "Failed to change mode of \"%s\": %m", t);
 
-                r = read_full_file(new_path, &new_contents, &size);
+                r = read_full_file(new_path, &new_contents, NULL);
                 if (r < 0 && r != -ENOENT)
                         return log_error_errno(r, "Failed to read \"%s\": %m", new_path);
 
@@ -182,7 +181,7 @@ static int create_edit_temp_file(const char *new_path, const char *original_path
                         if (path_equal(*path, new_path))
                                 continue;
 
-                        r = read_full_file(*path, &contents, &size);
+                        r = read_full_file(*path, &contents, NULL);
                         if (r < 0)
                                 return log_error_errno(r, "Failed to read \"%s\": %m", *path);
 
@@ -468,10 +467,12 @@ static int trim_edit_markers(const char *path) {
         int r;
 
         /* Trim out the lines between the two markers */
-        r = read_full_file(path, &contents, &size);
+        r = read_full_file(path, &contents, NULL);
         if (r < 0)
                 return log_error_errno(r, "Failed to read temporary file \"%s\": %m", path);
 
+        size = strlen(contents);
+
         contents_start = strstr(contents, EDIT_MARKER_START);
         if (contents_start)
                 contents_start += strlen(EDIT_MARKER_START);