git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] git: use COPY_ARRAY and MOVE_ARRAY in handle_alias()

From
René Scharfe <l.s.r@web.de>
Date
Sep 19, 2019, 20:48 UTC
Message-ID
<d5eef24a-faa8-d6f3-c9e5-f13dc40219d4@web.de>

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 <l.s.r@web.de>
---
 git.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/git.c b/git.c
index c1ee7124ed..ce6ab0ece2 100644
--- a/git.c
+++ b/git.c
@@ -369,8 +369,7 @@ static int handle_alias(int *argcp, const char ***argv)
 			die(_("alias '%s' changes environment variables.\n"
 			      "You can use '!git' in the alias to do this"),
 			    alias_command);
-		memmove(new_argv - option_count, new_argv,
-				count * sizeof(char *));
+		MOVE_ARRAY(new_argv - option_count, new_argv, count);
 		new_argv -= option_count;

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

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

 		trace2_cmd_alias(alias_command, new_argv);
 		trace2_cmd_list_config();
--
2.23.0
Next: Jeff King
Message 1 of 7 in “git: use COPY_ARRAY and MOVE_ARRAY in handle_alias()”
  1. git: use COPY_ARRAY and MOVE_ARRAY in handle_alias()René Scharfe, Sep 19, 2019
  2. Jeff KingSep 23, 2019
  3. sizeof(var) vs sizeof(type), was Re: [PATCH] git: use COPY_ARRAY and MOVE_ARRAY in handle_alias()Johannes Schindelin, Sep 26, 2019
  4. Derrick StoleeSep 26, 2019
  5. SZEDER GáborSep 26, 2019
  6. Philip OakleySep 26, 2019
  7. Derrick StoleeSep 26, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.