From 6e297e0ddd6e503d60c4aeb34da3ea04112c2b1d Mon Sep 17 00:00:00 2001 From: camel-cdr Date: Wed, 22 Jan 2025 19:38:11 +0000 Subject: [PATCH] fix infinite loop/oom when cwd longer then 1024 The code reads cwd into a buffer, which is expanded while errno is ERANGE, with the intent of growing the buffer until the path fits. While getcwd will set errno on error, it will not reset it once the path fits into the buffer. So to not get an infinite loop once errno is ERANGE, we need to make sure to reset errno, such that the loop behaves as expected. --- main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.c b/main.c index c5c11080..0ba574c9 100644 --- a/main.c +++ b/main.c @@ -552,10 +552,10 @@ main(int argc, char *const *argv) char *_cwd = NULL; if (cwd == NULL) { - errno = 0; size_t buf_len = 1024; do { _cwd = xrealloc(_cwd, buf_len); + errno = 0; if (getcwd(_cwd, buf_len) == NULL && errno != ERANGE) { LOG_ERRNO("failed to get current working directory"); goto out;