From: Erik Faye-Lund <kusmabite@gmail.com>
To: git@vger.kernel.org
Cc: matthieu.moy@grenoble-inp.fr, msysgit@googlegroups.com, blees@dcon.de
Subject: [PATCH v2] commit: fix memory-leak
Date: Mon, 7 Feb 2011 21:21:51 +0100 [thread overview]
Message-ID: <1297110111-7620-1-git-send-email-kusmabite@gmail.com> (raw)
In-Reply-To: <AANLkTikKZ+2qUMF1T5pP60cUd9Ya3n2mfhTkX6L32zmn@mail.gmail.com>
The name, email and date strings are some times allocated on the
heap, but not free'd. Fix this by making sure they are allways
heap-allocated, so we can safely free the memory.
At the same time, this fixes a problem with strict-POSIX getenv
implementations. POSIX says "The return value from getenv() may
point to static data which may be overwritten by subsequent calls
to getenv()", so not duplicating the strings is a potential bug.
Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>
---
Fixed typo in commit message, as pointed out by Matthieu Moy.
builtin/commit.c | 9 ++++++---
git-compat-util.h | 1 +
wrapper.c | 6 ++++++
3 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/builtin/commit.c b/builtin/commit.c
index 03cff5a..e5a649e 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -465,9 +465,9 @@ static void determine_author_info(struct strbuf *author_ident)
{
char *name, *email, *date;
- name = getenv("GIT_AUTHOR_NAME");
- email = getenv("GIT_AUTHOR_EMAIL");
- date = getenv("GIT_AUTHOR_DATE");
+ name = xgetenv("GIT_AUTHOR_NAME");
+ email = xgetenv("GIT_AUTHOR_EMAIL");
+ date = xgetenv("GIT_AUTHOR_DATE");
if (use_message && !renew_authorship) {
const char *a, *lb, *rb, *eol;
@@ -507,6 +507,9 @@ static void determine_author_info(struct strbuf *author_ident)
date = force_date;
strbuf_addstr(author_ident, fmt_ident(name, email, date,
IDENT_ERROR_ON_NO_NAME));
+ free(name);
+ free(email);
+ free(date);
}
static int ends_rfc2822_footer(struct strbuf *sb)
diff --git a/git-compat-util.h b/git-compat-util.h
index d6d269f..12f111f 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -409,6 +409,7 @@ typedef void (*try_to_free_t)(size_t);
extern try_to_free_t set_try_to_free_routine(try_to_free_t);
extern char *xstrdup(const char *str);
+extern char *xgetenv(const char *name);
extern void *xmalloc(size_t size);
extern void *xmallocz(size_t size);
extern void *xmemdupz(const void *data, size_t len);
diff --git a/wrapper.c b/wrapper.c
index 8d7dd31..e6173c4 100644
--- a/wrapper.c
+++ b/wrapper.c
@@ -30,6 +30,12 @@ char *xstrdup(const char *str)
return ret;
}
+char *xgetenv(const char *name)
+{
+ char *tmp = getenv(name);
+ return tmp ? xstrdup(tmp) : NULL;
+}
+
void *xmalloc(size_t size)
{
void *ret = malloc(size);
--
1.7.4.msysgit.0
next prev parent reply other threads:[~2011-02-07 20:22 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-02-07 18:40 [PATCH/RFC] commit: fix memory-leak Erik Faye-Lund
2011-02-07 18:48 ` Matthieu Moy
2011-02-07 19:22 ` Erik Faye-Lund
2011-02-07 20:21 ` Erik Faye-Lund [this message]
2011-02-07 21:12 ` [PATCH v2] " Erik Faye-Lund
2011-02-07 21:31 ` Erik Faye-Lund
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1297110111-7620-1-git-send-email-kusmabite@gmail.com \
--to=kusmabite@gmail.com \
--cc=blees@dcon.de \
--cc=git@vger.kernel.org \
--cc=matthieu.moy@grenoble-inp.fr \
--cc=msysgit@googlegroups.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.