]> git.ipfire.org Git - thirdparty/git.git/commitdiff
builtin/receive-pack: detect when the server doesn't support our hash
authorbrian m. carlson <sandals@crustytoothpaste.net>
Mon, 25 May 2020 19:59:01 +0000 (19:59 +0000)
committerJunio C Hamano <gitster@pobox.com>
Wed, 27 May 2020 17:07:06 +0000 (10:07 -0700)
Detect when the server doesn't support our hash algorithm and abort.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/receive-pack.c

index a4159b559e9679cd2038ac95f9eaefb99231c5f6..0da8ca513402a44dc2fe8ba38220f126c23f8025 100644 (file)
@@ -1624,6 +1624,8 @@ static struct command *read_head_info(struct packet_reader *reader,
                linelen = strlen(reader->line);
                if (linelen < reader->pktlen) {
                        const char *feature_list = reader->line + linelen + 1;
+                       const char *hash = NULL;
+                       int len = 0;
                        if (parse_feature_request(feature_list, "report-status"))
                                report_status = 1;
                        if (parse_feature_request(feature_list, "side-band-64k"))
@@ -1636,6 +1638,13 @@ static struct command *read_head_info(struct packet_reader *reader,
                        if (advertise_push_options
                            && parse_feature_request(feature_list, "push-options"))
                                use_push_options = 1;
+                       hash = parse_feature_value(feature_list, "object-format", &len, NULL);
+                       if (!hash) {
+                               hash = hash_algos[GIT_HASH_SHA1].name;
+                               len = strlen(hash);
+                       }
+                       if (xstrncmpz(the_hash_algo->name, hash, len))
+                               die("error: unsupported object format '%s'", hash);
                }
 
                if (!strcmp(reader->line, "push-cert")) {