getpwuid checking

Oskar Liljeblad oskar at osk.mine.nu
Thu Sep 23 10:48:02 UTC 2004


This patch fixes two potential segfault bugs because the result of
getpwuid is not checked.

Regards,

Oskar Liljeblad (oskar at osk.mine.nu)

-------------- next part --------------
diff -u -p src/main.c.v0 src/main.c
--- src/main.c.v0	2004-09-23 08:41:22.000000000 +0200
+++ src/main.c	2004-09-23 09:09:12.000000000 +0200
@@ -1761,8 +1761,12 @@ OS_Setup (void)
 {
     char *mc_libdir;
     shell = getenv ("SHELL");
-    if (!shell || !*shell)
-	shell = g_strdup (getpwuid (geteuid ())->pw_shell);
+    if (!shell || !*shell) {
+        struct passwd *pwd;
+        pwd = getpwuid (geteuid ());
+        if (pwd != NULL)
+           shell = g_strdup (pwd->pw_shell);
+    }
     if (!shell || !*shell)
 	shell = "/bin/sh";
 
diff -u -p src/utilunix.c.v0 src/utilunix.c
--- src/utilunix.c.v0	2004-09-23 08:36:08.000000000 +0200
+++ src/utilunix.c	2004-09-23 09:05:28.000000000 +0200
@@ -323,8 +323,13 @@ mc_tmpdir (void)
     }
 
     pwd = getpwuid (getuid ());
-    g_snprintf (buffer, sizeof (buffer), "%s/mc-%s", sys_tmp,
-		pwd->pw_name);
+    if (pwd == NULL) {
+        g_snprintf (buffer, sizeof (buffer), "%s/mc-%d", sys_tmp,
+		    getuid ());
+    } else {
+        g_snprintf (buffer, sizeof (buffer), "%s/mc-%s", sys_tmp,
+		    pwd->pw_name);
+    }
     canonicalize_pathname (buffer);
 
     if (lstat (buffer, &st) == 0) {


More information about the mc-devel mailing list