From a3ccff6c754345226980cef20a44c054467a9232 Mon Sep 17 00:00:00 2001 From: Martijn Dekker Date: Fri, 8 Jan 2021 12:32:56 +0000 Subject: [PATCH] cd: fix an invalid free() call (Solaris patch 211-21547336) This change is pulled from here: https://github.com/oracle/solaris-userland/blob/master/components/ksh93/patches/211-21547336.patch src/cmd/ksh93/bltins/cd_pwd.c: b_cd(): - The functions path_pwd() and path_relative() in sh/path.c may return a pointer to e_dot[] (".") as a fallback if they fail to determine a path. This is a string in read-only memory (data/msg.c), so must not be freed. A pointer to that string may end up in sh.pwd (== shp->pwd), so b_cd() needs a check for that. --- src/cmd/ksh93/bltins/cd_pwd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmd/ksh93/bltins/cd_pwd.c b/src/cmd/ksh93/bltins/cd_pwd.c index f55a6024859f..eebd5078da70 100644 --- a/src/cmd/ksh93/bltins/cd_pwd.c +++ b/src/cmd/ksh93/bltins/cd_pwd.c @@ -212,7 +212,7 @@ int b_cd(int argc, char *argv[],Shbltin_t *context) nv_scan(sh_subtracktree(1),rehash,(void*)0,NV_TAGGED,NV_TAGGED); path_newdir(shp,shp->pathlist); path_newdir(shp,shp->cdpathlist); - if(oldpwd) + if(oldpwd && oldpwd!=e_dot) free(oldpwd); return(0); }