While r13435 is attributed to me, the wrong condition was not mine. This
is a good example of why "cmp() op 0" pattern is usually safer because
the "==" or "!=" operator "tells" us whether the strings are equal,
unlike "!cmp()" that is often misread as "not equal".
if (pwd->pw_dir && *pwd->pw_dir) {
// putenv() leaks by design; avoid leaks when nothing changes
static SBuf lastDir;
- if (lastDir.isEmpty() || !lastDir.cmp(pwd->pw_dir)) {
+ if (lastDir.isEmpty() || lastDir.cmp(pwd->pw_dir) != 0) {
lastDir = pwd->pw_dir;
int len = strlen(pwd->pw_dir) + 6;
char *env_str = (char *)xcalloc(len, 1);