Kamil Dudka 0a5586
From 19c75aec6843b827fa7ef3f39174090ee7f8ac18 Mon Sep 17 00:00:00 2001
Kamil Dudka 0a5586
From: Peter Stephenson <p.w.stephenson@ntlworld.com>
Kamil Dudka 0a5586
Date: Thu, 22 Jan 2015 20:20:15 +0000
Kamil Dudka 0a5586
Subject: [PATCH] 34331: better handling of NULL in cd.
Kamil Dudka 0a5586
Kamil Dudka 0a5586
Problem was return from symbolic link expander in weird cases
Kamil Dudka 0a5586
where there file system isn't behaving itself properly.
Kamil Dudka 0a5586
Kamil Dudka 0a5586
Upstream-commit: 12b813b5895cae579e403dafe43878868f27fe0f
Kamil Dudka 0a5586
Signed-off-by: Kamil Dudka <kdudka@redhat.com>
Kamil Dudka 0a5586
---
Kamil Dudka 0a5586
 Src/builtin.c |  8 +++++---
Kamil Dudka 0a5586
 Src/utils.c   | 11 +++++++----
Kamil Dudka 0a5586
 2 files changed, 12 insertions(+), 7 deletions(-)
Kamil Dudka 0a5586
Kamil Dudka 0a5586
diff --git a/Src/builtin.c b/Src/builtin.c
Kamil Dudka 0a5586
index 2118835..489ca23 100644
Kamil Dudka 0a5586
--- a/Src/builtin.c
Kamil Dudka 0a5586
+++ b/Src/builtin.c
Kamil Dudka 0a5586
@@ -1156,9 +1156,11 @@ cd_new_pwd(int func, LinkNode dir, int quiet)
Kamil Dudka 0a5586
 	zsfree(getlinknode(dirstack));
Kamil Dudka 0a5586
 
Kamil Dudka 0a5586
     if (chasinglinks) {
Kamil Dudka 0a5586
-	s = new_pwd;
Kamil Dudka 0a5586
-	new_pwd = findpwd(s);
Kamil Dudka 0a5586
-	zsfree(s);
Kamil Dudka 0a5586
+	s = findpwd(new_pwd);
Kamil Dudka 0a5586
+	if (s) {
Kamil Dudka 0a5586
+	    zsfree(new_pwd);
Kamil Dudka 0a5586
+	    new_pwd = s;
Kamil Dudka 0a5586
+	}
Kamil Dudka 0a5586
     }
Kamil Dudka 0a5586
     if (isset(PUSHDIGNOREDUPS)) {
Kamil Dudka 0a5586
 	LinkNode n;
Kamil Dudka 0a5586
diff --git a/Src/utils.c b/Src/utils.c
Kamil Dudka 0a5586
index e6eb8e6..80396a2 100644
Kamil Dudka 0a5586
--- a/Src/utils.c
Kamil Dudka 0a5586
+++ b/Src/utils.c
Kamil Dudka 0a5586
@@ -1049,10 +1049,13 @@ getnameddir(char *name)
Kamil Dudka 0a5586
 	if ((pw = getpwnam(name))) {
Kamil Dudka 0a5586
 	    char *dir = isset(CHASELINKS) ? xsymlink(pw->pw_dir)
Kamil Dudka 0a5586
 		: ztrdup(pw->pw_dir);
Kamil Dudka 0a5586
-	    adduserdir(name, dir, ND_USERNAME, 1);
Kamil Dudka 0a5586
-	    str = dupstring(dir);
Kamil Dudka 0a5586
-	    zsfree(dir);
Kamil Dudka 0a5586
-	    return str;
Kamil Dudka 0a5586
+	    if (dir) {
Kamil Dudka 0a5586
+		adduserdir(name, dir, ND_USERNAME, 1);
Kamil Dudka 0a5586
+		str = dupstring(dir);
Kamil Dudka 0a5586
+		zsfree(dir);
Kamil Dudka 0a5586
+		return str;
Kamil Dudka 0a5586
+	    } else
Kamil Dudka 0a5586
+		return ztrdup(pw->pw_dir);
Kamil Dudka 0a5586
 	}
Kamil Dudka 0a5586
     }
Kamil Dudka 0a5586
 #endif /* HAVE_GETPWNAM */
Kamil Dudka 0a5586
-- 
Kamil Dudka 0a5586
2.1.0
Kamil Dudka 0a5586