sh: Fix rare memory leak with SIGINT

If getcwd() failed earlier on but later succeeded in the pwd builtin,
there was no INTOFF protection between calling savestr() and storing its
result.

It is quite rare for getcwd() to fail, and rarer for it to succeed later in
the same directory.

Found via code inspection for changing ckmalloc() and similar to assert
INTOFF protection instead of applying it directly (which protects against
corrupting malloc's internal state but allows memory leaks or double frees).

MFC after:	1 week
This commit is contained in:
Jilles Tjoelker 2020-01-01 12:06:37 +00:00
parent 73db93b889
commit d3eae2a68e

View File

@ -376,8 +376,11 @@ getpwd(void)
return curdir;
p = getpwd2();
if (p != NULL)
if (p != NULL) {
INTOFF;
curdir = savestr(p);
INTON;
}
return curdir;
}