diff --git a/csum-file.c b/csum-file.c index 907efbf860..c66b9eb10b 100644 --- a/csum-file.c +++ b/csum-file.c @@ -45,6 +45,7 @@ int sha1close(struct sha1file *f, unsigned char *result, int update) sha1flush(f, 20); if (close(f->fd)) die("%s: sha1 file error on close (%s)", f->name, strerror(errno)); + free(f); return 0; } diff --git a/git-clone-dumb-http b/git-clone-dumb-http index 8203c67626..50527086a0 100755 --- a/git-clone-dumb-http +++ b/git-clone-dumb-http @@ -14,7 +14,7 @@ if [ -n "$GIT_SSL_NO_VERIFY" ]; then fi http_fetch () { # $1 = Remote, $2 = Local - curl -ns $curl_extra_args "$1" >"$2" + curl -nsf $curl_extra_args "$1" >"$2" } cd "$D" && diff --git a/git-fetch-script b/git-fetch-script index a0326f0e78..24f0a5ec82 100755 --- a/git-fetch-script +++ b/git-fetch-script @@ -15,7 +15,7 @@ http://* | https://*) fi _x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]' && _x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40" && - head=$(curl -ns $curl_extra_args "$merge_repo/$merge_head") && + head=$(curl -nsf $curl_extra_args "$merge_repo/$merge_head") && expr "$head" : "$_x40\$" >/dev/null || { echo >&2 "Failed to fetch $merge_head from $merge_repo" exit 1 diff --git a/git-ls-remote-script b/git-ls-remote-script index 921d3f8462..31cdac8bfe 100755 --- a/git-ls-remote-script +++ b/git-ls-remote-script @@ -46,7 +46,7 @@ http://* | https://* ) if [ -n "$GIT_SSL_NO_VERIFY" ]; then curl_extra_args="-k" fi - curl -ns $curl_extra_args "$peek_repo/info/refs" || exit 1 + curl -nsf $curl_extra_args "$peek_repo/info/refs" || exit 1 ;; rsync://* ) diff --git a/git-tag-script b/git-tag-script index 4917f99576..d3074a8b3d 100755 --- a/git-tag-script +++ b/git-tag-script @@ -4,13 +4,14 @@ . git-sh-setup-script || die "Not a git archive" usage () { - echo >&2 "Usage: git-tag-script [-a | -s] [-f] tagname" + echo >&2 "Usage: git-tag-script [-a | -s] [-f] [-m "tag message"] tagname" exit 1 } annotate= signed= force= +message= while case "$#" in 0) break ;; esac do case "$1" in @@ -24,6 +25,11 @@ do -f) force=1 ;; + -m) + annotate=1 + shift + message="$1" + ;; -*) usage ;; @@ -48,10 +54,14 @@ tagger=$(git-var GIT_COMMITTER_IDENT) || exit 1 trap 'rm -f .tmp-tag* .tagmsg .editmsg' 0 if [ "$annotate" ]; then - ( echo "#" - echo "# Write a tag message" - echo "#" ) > .editmsg - ${VISUAL:-${EDITOR:-vi}} .editmsg || exit + if [ -z "$message" ]; then + ( echo "#" + echo "# Write a tag message" + echo "#" ) > .editmsg + ${VISUAL:-${EDITOR:-vi}} .editmsg || exit + else + echo "$message" > .editmsg + fi grep -v '^#' < .editmsg | git-stripspace > .tagmsg diff --git a/pack-objects.c b/pack-objects.c index ed24a33300..3d622787cc 100644 --- a/pack-objects.c +++ b/pack-objects.c @@ -382,6 +382,10 @@ static void find_deltas(struct object_entry **list, int window, int depth) if (idx >= window) idx = 0; } + + for (i = 0; i < window; ++i) + free(array[i].data); + free(array); } int main(int argc, char **argv) diff --git a/path.c b/path.c index 7ef0d1b80d..b85f087f43 100644 --- a/path.c +++ b/path.c @@ -68,8 +68,13 @@ int git_mkstemp(char *path, size_t len, const char *template) if ((env = getenv("TMPDIR")) == NULL) { strcpy(pch, "/tmp/"); len -= 5; - } else - len -= snprintf(pch, len, "%s/", env); + pch += 5; + } else { + size_t n = snprintf(pch, len, "%s/", env); + + len -= n; + pch += n; + } safe_strncpy(pch, template, len); diff --git a/sha1_file.c b/sha1_file.c index a17a6d13b2..e9285c144e 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -1165,6 +1165,7 @@ void *read_object_with_reference(const unsigned char *sha1, free(buffer); return NULL; } + free(buffer); /* Now we have the ID of the referred-to object in * actual_sha1. Check again. */ } @@ -1296,8 +1297,11 @@ int write_sha1_to_fd(int fd, const unsigned char *sha1) ssize_t size; unsigned long objsize; int posn = 0; - void *buf = map_sha1_file_internal(sha1, &objsize); + void *map = map_sha1_file_internal(sha1, &objsize); + void *buf = map; + void *temp_obj = NULL; z_stream stream; + if (!buf) { unsigned char *unpacked; unsigned long len; @@ -1313,7 +1317,7 @@ int write_sha1_to_fd(int fd, const unsigned char *sha1) memset(&stream, 0, sizeof(stream)); deflateInit(&stream, Z_BEST_COMPRESSION); size = deflateBound(&stream, len + hdrlen); - buf = xmalloc(size); + temp_obj = buf = xmalloc(size); /* Compress it */ stream.next_out = buf; @@ -1331,6 +1335,7 @@ int write_sha1_to_fd(int fd, const unsigned char *sha1) while (deflate(&stream, Z_FINISH) == Z_OK) /* nothing */; deflateEnd(&stream); + free(unpacked); objsize = stream.total_out; } @@ -1347,6 +1352,12 @@ int write_sha1_to_fd(int fd, const unsigned char *sha1) } posn += size; } while (posn < objsize); + + if (map) + munmap(map, objsize); + if (temp_obj) + free(temp_obj); + return 0; }