]> git.cameronkatri.com Git - cgit.git/commitdiff
ui-tree: remove a fixed size buffer
authorJohn Keeping <john@keeping.me.uk>
Sat, 13 Aug 2016 10:54:46 +0000 (11:54 +0100)
committerJohn Keeping <john@keeping.me.uk>
Sat, 1 Oct 2016 10:46:55 +0000 (11:46 +0100)
As libgit.a moves away from using fixed size buffers, there is no
guarantee that PATH_MAX is sufficient for all of the paths in a Git
tree, so we should use a dynamically sized buffer here.

Coverity-Id: 141884
Signed-off-by: John Keeping <john@keeping.me.uk>
ui-tree.c

index 5c31e6abe426cf91d68f9e695a5064209e80467f..b98a7f0dd543977a84862de959057b8bbee3de1d 100644 (file)
--- a/ui-tree.c
+++ b/ui-tree.c
@@ -324,22 +324,25 @@ static int walk_tree(const unsigned char *sha1, struct strbuf *base,
                const char *pathname, unsigned mode, int stage, void *cbdata)
 {
        struct walk_tree_context *walk_tree_ctx = cbdata;
                const char *pathname, unsigned mode, int stage, void *cbdata)
 {
        struct walk_tree_context *walk_tree_ctx = cbdata;
-       static char buffer[PATH_MAX];
 
        if (walk_tree_ctx->state == 0) {
 
        if (walk_tree_ctx->state == 0) {
-               memcpy(buffer, base->buf, base->len);
-               strcpy(buffer + base->len, pathname);
-               if (strcmp(walk_tree_ctx->match_path, buffer))
+               struct strbuf buffer = STRBUF_INIT;
+
+               strbuf_addbuf(&buffer, base);
+               strbuf_addstr(&buffer, pathname);
+               if (strcmp(walk_tree_ctx->match_path, buffer.buf))
                        return READ_TREE_RECURSIVE;
 
                if (S_ISDIR(mode)) {
                        walk_tree_ctx->state = 1;
                        return READ_TREE_RECURSIVE;
 
                if (S_ISDIR(mode)) {
                        walk_tree_ctx->state = 1;
-                       set_title_from_path(buffer);
+                       set_title_from_path(buffer.buf);
+                       strbuf_release(&buffer);
                        ls_head();
                        return READ_TREE_RECURSIVE;
                } else {
                        walk_tree_ctx->state = 2;
                        ls_head();
                        return READ_TREE_RECURSIVE;
                } else {
                        walk_tree_ctx->state = 2;
-                       print_object(sha1, buffer, pathname, walk_tree_ctx->curr_rev);
+                       print_object(sha1, buffer.buf, pathname, walk_tree_ctx->curr_rev);
+                       strbuf_release(&buffer);
                        return 0;
                }
        }
                        return 0;
                }
        }