diff options
author | Anita Zhang <the.anitazha@gmail.com> | 2022-01-26 10:53:40 -0800 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2022-01-27 13:45:00 +0900 |
commit | 1d3b68f6e1538b6a86cbe3650d8b81df2877ef42 (patch) | |
tree | 7e6eecac1e65b796cc894dfb4bcee2377ba8bf9d /src/shared/pager.c | |
parent | f223fd6addad51e1661d3baa409eb12de5065817 (diff) | |
download | systemd-1d3b68f6e1538b6a86cbe3650d8b81df2877ef42.tar.gz |
tree-wide: don't use strjoina() on getenv() values
Avoid doing stack allocations on environment variables.
Diffstat (limited to 'src/shared/pager.c')
-rw-r--r-- | src/shared/pager.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/shared/pager.c b/src/shared/pager.c index f75ef62d2d..9426d3ef98 100644 --- a/src/shared/pager.c +++ b/src/shared/pager.c @@ -86,6 +86,7 @@ static int no_quit_on_interrupt(int exe_name_fd, const char *less_opts) { void pager_open(PagerFlags flags) { _cleanup_close_pair_ int fd[2] = { -1, -1 }, exe_name_pipe[2] = { -1, -1 }; _cleanup_strv_free_ char **pager_args = NULL; + _cleanup_free_ char *l = NULL; const char *pager, *less_opts; int r; @@ -131,8 +132,12 @@ void pager_open(PagerFlags flags) { less_opts = getenv("SYSTEMD_LESS"); if (!less_opts) less_opts = "FRSXMK"; - if (flags & PAGER_JUMP_TO_END) - less_opts = strjoina(less_opts, " +G"); + if (flags & PAGER_JUMP_TO_END) { + l = strjoin(less_opts, " +G"); + if (!l) + return (void) log_oom(); + less_opts = l; + } /* We set SIGINT as PR_DEATHSIG signal here, to match the "K" parameter we set in $LESS, which enables SIGINT behaviour. */ r = safe_fork("(pager)", FORK_RESET_SIGNALS|FORK_DEATHSIG_SIGINT|FORK_RLIMIT_NOFILE_SAFE|FORK_LOG, &pager_pid); |