]> git.ipfire.org Git - thirdparty/git.git/commitdiff
Merge branch 'rs/fetch-pack-invalid-lockfile'
authorJunio C Hamano <gitster@pobox.com>
Tue, 8 Dec 2020 23:11:20 +0000 (15:11 -0800)
committerJunio C Hamano <gitster@pobox.com>
Tue, 8 Dec 2020 23:11:20 +0000 (15:11 -0800)
"fetch-pack" could pass NULL pointer to unlink(2) when it sees an
invalid filename; the error checking has been tightened to make
this impossible.

* rs/fetch-pack-invalid-lockfile:
  fetch-pack: disregard invalid pack lockfiles

1  2 
fetch-pack.c

diff --combined fetch-pack.c
index 23179b8dd0250a700dec847d0c2916d7a8660917,4625926cf07ea10f038876d1950bc1aa1df28b2a..876f90c759a09334bb4a47575c236d27f2887b98
@@@ -35,7 -35,6 +35,7 @@@ static int fetch_fsck_objects = -1
  static int transfer_fsck_objects = -1;
  static int agent_supported;
  static int server_supports_filtering;
 +static int advertise_sid;
  static struct shallow_lock shallow_lock;
  static const char *alternate_shallow_file;
  static struct strbuf fsck_msg_types = STRBUF_INIT;
@@@ -327,8 -326,6 +327,8 @@@ static int find_common(struct fetch_neg
                        if (deepen_not_ok)      strbuf_addstr(&c, " deepen-not");
                        if (agent_supported)    strbuf_addf(&c, " agent=%s",
                                                            git_user_agent_sanitized());
 +                      if (advertise_sid)
 +                              strbuf_addf(&c, " session-id=%s", trace2_session_id());
                        if (args->filter_options.choice)
                                strbuf_addstr(&c, " filter");
                        packet_buf_write(&req_buf, "want %s%s\n", remote_hex, c.buf);
@@@ -918,8 -915,9 +918,9 @@@ static int get_pack(struct fetch_pack_a
        if (start_command(&cmd))
                die(_("fetch-pack: unable to fork off %s"), cmd_name);
        if (do_keep && pack_lockfiles) {
-               string_list_append_nodup(pack_lockfiles,
-                                        index_pack_lockfile(cmd.out));
+               char *pack_lockfile = index_pack_lockfile(cmd.out);
+               if (pack_lockfile)
+                       string_list_append_nodup(pack_lockfiles, pack_lockfile);
                close(cmd.out);
        }
  
@@@ -982,9 -980,6 +983,9 @@@ static struct ref *do_fetch_pack(struc
                                      agent_len, agent_feature);
        }
  
 +      if (!server_supports("session-id"))
 +              advertise_sid = 0;
 +
        if (server_supports("shallow"))
                print_verbose(args, _("Server supports %s"), "shallow");
        else if (args->depth > 0 || is_repository_shallow(r))
@@@ -1197,8 -1192,6 +1198,8 @@@ static int send_fetch_request(struct fe
                packet_buf_write(&req_buf, "command=fetch");
        if (server_supports_v2("agent", 0))
                packet_buf_write(&req_buf, "agent=%s", git_user_agent_sanitized());
 +      if (advertise_sid && server_supports_v2("session-id", 0))
 +              packet_buf_write(&req_buf, "session-id=%s", trace2_session_id());
        if (args->server_options && args->server_options->nr &&
            server_supports_v2("server-option", 1)) {
                int i;
@@@ -1719,7 -1712,6 +1720,7 @@@ static void fetch_pack_config(void
        git_config_get_bool("repack.usedeltabaseoffset", &prefer_ofs_delta);
        git_config_get_bool("fetch.fsckobjects", &fetch_fsck_objects);
        git_config_get_bool("transfer.fsckobjects", &transfer_fsck_objects);
 +      git_config_get_bool("transfer.advertisesid", &advertise_sid);
        if (!uri_protocols.nr) {
                char *str;