1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-03-08 20:58:20 +03:00

systemctl: pecify read_full_file() size argument as NULL

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.)
This commit is contained in:
Lennart Poettering 2021-03-17 18:44:51 +01:00
parent 627055ce9a
commit be81e45c74

View 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_free_ char *new_contents = NULL;
_cleanup_fclose_ FILE *f = NULL; _cleanup_fclose_ FILE *f = NULL;
char **path; char **path;
size_t size;
r = mac_selinux_create_file_prepare(new_path, S_IFREG); r = mac_selinux_create_file_prepare(new_path, S_IFREG);
if (r < 0) if (r < 0)
@ -161,7 +160,7 @@ static int create_edit_temp_file(const char *new_path, const char *original_path
if (r < 0) if (r < 0)
return log_error_errno(errno, "Failed to change mode of \"%s\": %m", t); 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) if (r < 0 && r != -ENOENT)
return log_error_errno(r, "Failed to read \"%s\": %m", new_path); 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)) if (path_equal(*path, new_path))
continue; continue;
r = read_full_file(*path, &contents, &size); r = read_full_file(*path, &contents, NULL);
if (r < 0) if (r < 0)
return log_error_errno(r, "Failed to read \"%s\": %m", *path); 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; int r;
/* Trim out the lines between the two markers */ /* 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) if (r < 0)
return log_error_errno(r, "Failed to read temporary file \"%s\": %m", path); return log_error_errno(r, "Failed to read temporary file \"%s\": %m", path);
size = strlen(contents);
contents_start = strstr(contents, EDIT_MARKER_START); contents_start = strstr(contents, EDIT_MARKER_START);
if (contents_start) if (contents_start)
contents_start += strlen(EDIT_MARKER_START); contents_start += strlen(EDIT_MARKER_START);