From bfabc5450b3a01c7d701809b3cf6158220ea289e 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;