]> git.ipfire.org Git - thirdparty/git.git/commitdiff
Merge branch 'jk/sparse-leakfix'
authorJunio C Hamano <gitster@pobox.com>
Wed, 12 Jun 2024 20:37:17 +0000 (13:37 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 12 Jun 2024 20:37:17 +0000 (13:37 -0700)
Many memory leaks in the sparse-checkout code paths have been
plugged.

* jk/sparse-leakfix:
  sparse-checkout: free duplicate hashmap entries
  sparse-checkout: free string list after displaying
  sparse-checkout: free pattern list in sparse_checkout_list()
  sparse-checkout: free sparse_filename after use
  sparse-checkout: refactor temporary sparse_checkout_patterns
  sparse-checkout: always free "line" strbuf after reading input
  sparse-checkout: reuse --stdin buffer when reading patterns
  dir.c: always copy input to add_pattern()
  dir.c: free removed sparse-pattern hashmap entries
  sparse-checkout: clear patterns when init() sees existing sparse file
  dir.c: free strings in sparse cone pattern hashmaps
  sparse-checkout: pass string literals directly to add_pattern()
  sparse-checkout: free string list in write_cone_to_file()

1  2 
dir.c

diff --cc dir.c
index ad2b7ebe2de6ca7ef27022cd40a575374d6ab7ce,8308d167c890bb5e48309dce8ed98c10d1313f14..45be4ad2615a4dff0439c9df77f63a70c34ba7b5
--- 1/dir.c
--- 2/dir.c
+++ b/dir.c
@@@ -1155,13 -1159,8 +1166,14 @@@ static int add_patterns(const char *fna
                }
        }
  
 +      if (size > PATTERN_MAX_FILE_SIZE) {
 +              warning("ignoring excessively large pattern file: %s", fname);
 +              free(buf);
 +              return -1;
 +      }
 +
        add_patterns_from_buffer(buf, size, base, baselen, pl);
+       free(buf);
        return 0;
  }
  
@@@ -1217,14 -1215,8 +1228,15 @@@ int add_patterns_from_blob_to_list
        if (r != 1)
                return r;
  
 +      if (size > PATTERN_MAX_FILE_SIZE) {
 +              warning("ignoring excessively large pattern blob: %s",
 +                      oid_to_hex(oid));
 +              free(buf);
 +              return -1;
 +      }
 +
        add_patterns_from_buffer(buf, size, base, baselen, pl);
+       free(buf);
        return 0;
  }