summaryrefslogtreecommitdiff
path: root/src/shared/pager.c
diff options
context:
space:
mode:
authorAnita Zhang <the.anitazha@gmail.com>2022-01-26 10:53:40 -0800
committerYu Watanabe <watanabe.yu+github@gmail.com>2022-01-27 13:45:00 +0900
commit1d3b68f6e1538b6a86cbe3650d8b81df2877ef42 (patch)
tree7e6eecac1e65b796cc894dfb4bcee2377ba8bf9d /src/shared/pager.c
parentf223fd6addad51e1661d3baa409eb12de5065817 (diff)
downloadsystemd-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.c9
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);