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.
This commit is contained in:
camel-cdr 2025-01-22 19:38:11 +00:00 committed by Daniel Eklöf
parent 736328ab6b
commit bfabc5450b
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F

2
main.c
View file

@ -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;