summaryrefslogtreecommitdiff
path: root/verify-pack.c
diff options
context:
space:
mode:
authorRene Scharfe <rene.scharfe@lsrfire.ath.cx>2006-08-10 17:02:32 +0200
committerJunio C Hamano <junkio@cox.net>2006-08-10 14:14:27 -0700
commitae9c86f2b6c89a3a0991209dae51086f884959c0 (patch)
tree8ad2da20f1e1e64556a0d4a6d551cfbf08bfc3d7 /verify-pack.c
parent6f05b57da8e82c471ea6765da67e813d496ed278 (diff)
downloadgit-ae9c86f2b6c89a3a0991209dae51086f884959c0.tar.gz
git-verify-pack: more careful path handling
Use strlcpy() to copy the filename into a buffer and complain if it doesn't fit. Also move the path buffer into verify_one_pack(); it is used only there. Now we can const'ify the first argument of this function. Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx> Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'verify-pack.c')
-rw-r--r--verify-pack.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/verify-pack.c b/verify-pack.c
index 7201596bf9..77b3d282da 100644
--- a/verify-pack.c
+++ b/verify-pack.c
@@ -1,11 +1,16 @@
#include "cache.h"
#include "pack.h"
-static int verify_one_pack(char *arg, int verbose)
+static int verify_one_pack(const char *path, int verbose)
{
- int len = strlen(arg);
+ char arg[PATH_MAX];
+ int len;
struct packed_git *g;
-
+
+ len = strlcpy(arg, path, PATH_MAX);
+ if (len >= PATH_MAX)
+ return error("name too long: %s", path);
+
while (1) {
/* Should name foo.idx, but foo.pack may be named;
* convert it to foo.idx
@@ -37,8 +42,6 @@ int main(int ac, char **av)
int nothing_done = 1;
while (1 < ac) {
- char path[PATH_MAX];
-
if (!no_more_options && av[1][0] == '-') {
if (!strcmp("-v", av[1]))
verbose = 1;
@@ -48,8 +51,7 @@ int main(int ac, char **av)
usage(verify_pack_usage);
}
else {
- strcpy(path, av[1]);
- if (verify_one_pack(path, verbose))
+ if (verify_one_pack(av[1], verbose))
errs++;
nothing_done = 0;
}