Re: minor problems in git.c
- From
Alex Riesen <raa.lkml@gmail.com>
- Date
- Dec 1, 2005, 14:02 UTC
- Message-ID
- <81b0412b0512010602l63ecev1ba03fb90d06e071@mail.gmail.com>
- In-Reply-To
- <20051201135113.GW8383MdfPADPa@greensroom.kotnet.org>
On 12/1/05, Sven Verdoolaege <skimo@kotnet.org> wrote:
Show 12 quoted lines
> On Thu, Dec 01, 2005 at 01:48:35PM +0100, Alex Riesen wrote: > > @@ -283,16 +283,15 @@ int main(int argc, char **argv, char **e > > len = strlen(git_command); > > prepend_to_path(git_command, len); > > > > - strncat(&git_command[len], "/git-", sizeof(git_command) - len); > > - len += 5; > > - strncat(&git_command[len], argv[i], sizeof(git_command) - len); > > + snprintf(git_command + len, sizeof(git_command) - len, "/git-%s", > > + argv[i]); > > Shouldn't you check the return value of snprintf
Probably. For the case where length of a git-command-name + --exec-prefix together are longer than PATH_MAX.
> > if (access(git_command, X_OK)) > > usage(exec_path, "'%s' is not a git-command", argv[i]); > > or use the (possibly) truncated version of the command in the error message ?
argv[i] is the command name, already as truncated as it can possibly be: ls-files, ls-tree, etc. Besides, the second path removes this access check altogether:
- if (access(git_command, X_OK)) - usage(exec_path, "'%s' is not a git-command", argv[i]); - /* execve() can only ever return if it fails */ execve(git_command, &argv[i], envp); - fprintf(stderr, "git: '%s': %s\n", git_command, strerror(errno)); + if ( ENOENT == errno ) + usage(exec_path, "'%s' is not a git-command", argv[i]); + else + fprintf(stderr, "git: '%s': %s\n", git_command, strerror(errno));
It still has the call to usage, though.