]> git.proxmox.com Git - libgit2.git/commitdiff
tree: fix insertion of entries with invalid filenames
authornulltoken <emeric.fermas@gmail.com>
Wed, 13 Jul 2011 05:58:17 +0000 (07:58 +0200)
committernulltoken <emeric.fermas@gmail.com>
Wed, 13 Jul 2011 05:58:17 +0000 (07:58 +0200)
src/tree.c
tests/t09-tree.c

index 114181f1b4acfbfaf60e09cc57b4e34fe021318b..975d36a70698624b8255fef83fc9e945dade59c4 100644 (file)
@@ -379,10 +379,12 @@ int git_treebuilder_insert(git_tree_entry **entry_out, git_treebuilder *bld, con
        assert(bld && id && filename);
 
        if (!valid_attributes(attributes))
-               return git__throw(GIT_ERROR, "Failed to insert entry. Invalid atrributes");
+               return git__throw(GIT_ERROR, "Failed to insert entry. Invalid attributes");
 
-       if (build_ksearch(&ksearch, filename) == GIT_SUCCESS &&
-               (pos = git_vector_bsearch2(&bld->entries, entry_search_cmp, &ksearch)) != GIT_ENOTFOUND) {
+       if (build_ksearch(&ksearch, filename) < GIT_SUCCESS)
+               return git__throw(GIT_ERROR, "Failed to insert entry. Invalid filename '%s'", filename);
+
+       if ((pos = git_vector_bsearch2(&bld->entries, entry_search_cmp, &ksearch)) != GIT_ENOTFOUND) {
                entry = git_vector_get(&bld->entries, pos);
                if (entry->removed) {
                        entry->removed = 0;
index 640deab0085af9aa6a6bff5107447eee7868ffd2..be21e4e33ebeb9ad99c3ec575687a1954c75bfcf 100644 (file)
@@ -150,6 +150,11 @@ BEGIN_TEST(write2, "write a tree from a memory")
        //create a second tree from first tree using `git_treebuilder_insert` on REPOSITORY_FOLDER.
        must_pass(git_tree_lookup(&tree, repo, &id));
        must_pass(git_treebuilder_create(&builder, tree));
+
+       must_fail(git_treebuilder_insert(NULL, builder, "", &bid, 0100644));
+       must_fail(git_treebuilder_insert(NULL, builder, "/", &bid, 0100644));
+       must_fail(git_treebuilder_insert(NULL, builder, "folder/new.txt", &bid, 0100644));
+
        must_pass(git_treebuilder_insert(NULL,builder,"new.txt",&bid,0100644));
        must_pass(git_treebuilder_write(&rid,repo,builder));