Skip to content

Commit

Permalink
checkout-index: plug memory leak from prefix_path()
Browse files Browse the repository at this point in the history
prefix_path() sometimes allocates new memory and returns it, and
other times returns the incoming path argument intact.  The
callers need to be a bit careful not to leak memory.

Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Junio C Hamano committed May 6, 2006
1 parent 09895c1 commit dc46da2
Showing 1 changed file with 11 additions and 2 deletions.
13 changes: 11 additions & 2 deletions checkout-index.c
Original file line number Diff line number Diff line change
Expand Up @@ -269,12 +269,16 @@ int main(int argc, char **argv)
/* Check out named files first */
for ( ; i < argc; i++) {
const char *arg = argv[i];
const char *p;

if (all)
die("git-checkout-index: don't mix '--all' and explicit filenames");
if (read_from_stdin)
die("git-checkout-index: don't mix '--stdin' and explicit filenames");
checkout_file(prefix_path(prefix, prefix_length, arg));
p = prefix_path(prefix, prefix_length, arg);
checkout_file(p);
if (p != arg)
free((char*)p);
}

if (read_from_stdin) {
Expand All @@ -284,14 +288,19 @@ int main(int argc, char **argv)
strbuf_init(&buf);
while (1) {
char *path_name;
const char *p;

read_line(&buf, stdin, line_termination);
if (buf.eof)
break;
if (line_termination && buf.buf[0] == '"')
path_name = unquote_c_style(buf.buf, NULL);
else
path_name = buf.buf;
checkout_file(prefix_path(prefix, prefix_length, path_name));
p = prefix_path(prefix, prefix_length, path_name);
checkout_file(p);
if (p != path_name)
free((char *)p);
if (path_name != buf.buf)
free(path_name);
}
Expand Down

0 comments on commit dc46da2

Please sign in to comment.