]> granicus.if.org Git - shadow/commitdiff
Fix memory leak.
authorNicolas François <nicolas.francois@centraliens.net>
Fri, 2 Aug 2013 18:28:24 +0000 (20:28 +0200)
committerNicolas François <nicolas.francois@centraliens.net>
Fri, 2 Aug 2013 18:28:24 +0000 (20:28 +0200)
* libmisc/setupenv.c: Free pw_dir and pw_shell before reallocating
them.

ChangeLog
libmisc/setupenv.c

index b7a1e142f9fda04e75430e7219e5ebb517384735..f5a864869ff6b36d2138dd0f6d14b1fb8512ae3c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,8 @@
        * libmisc/setupenv.c: xstrdup the static char* temp_pw_dir /
        temp_pw_shell. That way we can continue to use pw_free() without
        segving. Thanks to Serge Hallyn for the patch.
+       * libmisc/setupenv.c: Free pw_dir and pw_shell before reallocating
+       them.
 
 2013-08-01  Yuri Kozlov  <yuray@komyakino.ru>
 
index 28891ae12706a0ef6455147805719f1361e50dce..8020f3d5313143e9cbaaa2609cb642987246712e 100644 (file)
@@ -228,6 +228,7 @@ void setup_env (struct passwd *info)
                        exit (EXIT_FAILURE);
                }
                (void) puts (_("No directory, logging in with HOME=/"));
+               free (info->pw_dir);
                info->pw_dir = xstrdup (temp_pw_dir);
        }
 
@@ -244,6 +245,7 @@ void setup_env (struct passwd *info)
        if ((NULL == info->pw_shell) || ('\0' == *info->pw_shell)) {
                static char temp_pw_shell[] = SHELL;
 
+               free (info->pw_shell);
                info->pw_shell = xstrdup (temp_pw_shell);
        }