Skip to content

Commit

Permalink
Fix a memory leak in "connect.c" and die if command too long.
Browse files Browse the repository at this point in the history
Use "add_to_string" instead of "sq_quote" and "snprintf", so
that there is no memory allocation and no memory leak.
Also check if the command is too long to fit into the buffer
and die if this is the case, instead of truncating it to the
buffer size.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
chriscool authored and Junio C Hamano committed Sep 11, 2006
1 parent 86257aa commit 0f503d7
Showing 1 changed file with 14 additions and 3 deletions.
17 changes: 14 additions & 3 deletions connect.c
Expand Up @@ -599,12 +599,13 @@ static void git_proxy_connect(int fd[2], char *host)
close(pipefd[1][0]);
}

#define MAX_CMD_LEN 1024

/*
* Yeah, yeah, fixme. Need to pass in the heads etc.
*/
int git_connect(int fd[2], char *url, const char *prog)
{
char command[1024];
char *host, *path = url;
char *end;
int c;
Expand Down Expand Up @@ -697,8 +698,18 @@ int git_connect(int fd[2], char *url, const char *prog)
if (pid < 0)
die("unable to fork");
if (!pid) {
snprintf(command, sizeof(command), "%s %s", prog,
sq_quote(path));
char command[MAX_CMD_LEN];
char *posn = command;
int size = MAX_CMD_LEN;
int of = 0;

of |= add_to_string(&posn, &size, prog, 0);
of |= add_to_string(&posn, &size, " ", 0);
of |= add_to_string(&posn, &size, path, 1);

if (of)
die("command line too long");

dup2(pipefd[1][0], 0);
dup2(pipefd[0][1], 1);
close(pipefd[0][0]);
Expand Down

0 comments on commit 0f503d7

Please sign in to comment.