]> git.ipfire.org Git - thirdparty/git.git/commitdiff
test-bloom: check that we have expected arguments
authorJeff King <peff@peff.net>
Thu, 23 Apr 2020 20:59:14 +0000 (16:59 -0400)
committerJunio C Hamano <gitster@pobox.com>
Thu, 23 Apr 2020 23:05:29 +0000 (16:05 -0700)
If "test-tool bloom" is not fed a command, or if arguments are missing
for some commands, it will just segfault. Let's check argc and write a
friendlier usage message.

Signed-off-by: Jeff King <peff@peff.net>
Reviewed-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/helper/test-bloom.c

index f9c0ce2bae30fe14eae20888216c9647ccb632ab..77eb27adac746e038b4e73f0e356354d3cfd9570 100644 (file)
@@ -43,10 +43,21 @@ static void get_bloom_filter_for_commit(const struct object_id *commit_oid)
        print_bloom_filter(filter);
 }
 
+static const char *bloom_usage = "\n"
+"  test-tool bloom get_murmer3 <string>\n"
+"  test-tool bloom generate_filter <string> [<string>...]\n"
+"  test-tool get_filter_for_commit <commit-hex>\n";
+
 int cmd__bloom(int argc, const char **argv)
 {
+       if (argc < 2)
+               usage(bloom_usage);
+
        if (!strcmp(argv[1], "get_murmur3")) {
-               uint32_t hashed = murmur3_seeded(0, argv[2], strlen(argv[2]));
+               uint32_t hashed;
+               if (argc < 3)
+                       usage(bloom_usage);
+               hashed = murmur3_seeded(0, argv[2], strlen(argv[2]));
                printf("Murmur3 Hash with seed=0:0x%08x\n", hashed);
        }
 
@@ -56,9 +67,8 @@ int cmd__bloom(int argc, const char **argv)
                filter.len =  (settings.bits_per_entry + BITS_PER_WORD - 1) / BITS_PER_WORD;
                filter.data = xcalloc(filter.len, sizeof(unsigned char));
 
-               if (!argv[2]) {
-                       die("at least one input string expected");
-               }
+               if (argc - 1 < i)
+                       usage(bloom_usage);
 
                while (argv[i]) {
                        add_string_to_filter(argv[i], &filter);
@@ -71,6 +81,8 @@ int cmd__bloom(int argc, const char **argv)
        if (!strcmp(argv[1], "get_filter_for_commit")) {
                struct object_id oid;
                const char *end;
+               if (argc < 3)
+                       usage(bloom_usage);
                if (parse_oid_hex(argv[2], &oid, &end))
                        die("cannot parse oid '%s'", argv[2]);
                init_bloom_filters();