Skip to content

Commit

Permalink
cmd_fetch_pack(): respect constness of argv parameter
Browse files Browse the repository at this point in the history
The old code cast away the constness of the strings passed to the
function in argument argv[], which could result in their being
modified by filter_refs().  Fix by copying reference names from argv
and putting them into our own array (similarly to how refnames passed
to stdin were already handled).

Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Michael Haggerty authored and Junio C Hamano committed May 22, 2012
1 parent ff22ff9 commit 57e6fc6
Showing 1 changed file with 10 additions and 13 deletions.
23 changes: 10 additions & 13 deletions builtin/fetch-pack.c
Original file line number Diff line number Diff line change
Expand Up @@ -898,18 +898,18 @@ static void fetch_pack_setup(void)

int cmd_fetch_pack(int argc, const char **argv, const char *prefix)
{
int i, ret, nr_heads;
int i, ret;
struct ref *ref = NULL;
const char *dest = NULL;
char **heads;
int alloc_heads = 0, nr_heads = 0;
char **heads = NULL;
int fd[2];
char *pack_lockfile = NULL;
char **pack_lockfile_ptr = NULL;
struct child_process *conn;

packet_trace_identity("fetch-pack");

heads = NULL;
for (i = 1; i < argc && *argv[i] == '-'; i++) {
const char *arg = argv[i];

Expand Down Expand Up @@ -975,17 +975,14 @@ int cmd_fetch_pack(int argc, const char **argv, const char *prefix)
else
usage(fetch_pack_usage);

heads = (char **)(argv + i);
nr_heads = argc - i;

/*
* Copy refs from cmdline to growable list, then append any
* refs from the standard input:
*/
ALLOC_GROW(heads, argc - i, alloc_heads);
for (; i < argc; i++)
heads[nr_heads++] = xstrdup(argv[i]);
if (args.stdin_refs) {
/*
* Copy refs from cmdline to new growable list, then
* append the refs from the standard input.
*/
int alloc_heads = nr_heads;
int size = nr_heads * sizeof(*heads);
heads = memcpy(xmalloc(size), heads, size);
if (args.stateless_rpc) {
/* in stateless RPC mode we use pkt-line to read
* from stdin, until we get a flush packet
Expand Down

0 comments on commit 57e6fc6

Please sign in to comment.