Skip to content

Commit 7bd97d6

Browse files
rscharfegitster
authored andcommitted
git: use COPY_ARRAY and MOVE_ARRAY in handle_alias()
Use the macro COPY_ARRAY to copy array elements and MOVE_ARRAY to do the same for moving them backwards in an array with potential overlap. The result is shorter and safer, as it infers the element type automatically and does a (very) basic type compatibility check for its first two arguments. These cases were missed by Coccinelle and contrib/coccinelle/array.cocci because the type of the elements is "const char *", not "char *", and the rules in the semantic patch cautiously insist on the sizeof operator being used on exactly the same type to avoid generating transformations that introduce subtle bugs into tricky code. Signed-off-by: René Scharfe <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 5fa0f52 commit 7bd97d6

File tree

1 file changed

+2
-3
lines changed

1 file changed

+2
-3
lines changed

git.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -369,8 +369,7 @@ static int handle_alias(int *argcp, const char ***argv)
369369
die(_("alias '%s' changes environment variables.\n"
370370
"You can use '!git' in the alias to do this"),
371371
alias_command);
372-
memmove(new_argv - option_count, new_argv,
373-
count * sizeof(char *));
372+
MOVE_ARRAY(new_argv - option_count, new_argv, count);
374373
new_argv -= option_count;
375374

376375
if (count < 1)
@@ -385,7 +384,7 @@ static int handle_alias(int *argcp, const char ***argv)
385384

386385
REALLOC_ARRAY(new_argv, count + *argcp);
387386
/* insert after command name */
388-
memcpy(new_argv + count, *argv + 1, sizeof(char *) * *argcp);
387+
COPY_ARRAY(new_argv + count, *argv + 1, *argcp);
389388

390389
trace2_cmd_alias(alias_command, new_argv);
391390
trace2_cmd_list_config();

0 commit comments

Comments
 (0)