diff --git a/src/cache.c b/src/cache.c index 1f5b8872c..edd3a47dd 100644 --- a/src/cache.c +++ b/src/cache.c @@ -41,6 +41,7 @@ void git_cache_free(git_cache *cache) git_cached_obj_decref(cache->nodes[i], cache->free_obj); } + git_mutex_free(&cache->lock); git__free(cache->nodes); } diff --git a/src/transports/winhttp.c b/src/transports/winhttp.c index 44617f389..df6cd87ec 100644 --- a/src/transports/winhttp.c +++ b/src/transports/winhttp.c @@ -278,6 +278,7 @@ static int winhttp_stream_read( { winhttp_stream *s = (winhttp_stream *)stream; winhttp_subtransport *t = OWNING_SUBTRANSPORT(s); + DWORD dw_bytes_read; replay: /* Connect if necessary */ @@ -376,12 +377,14 @@ replay: if (!WinHttpReadData(s->request, (LPVOID)buffer, buf_size, - (LPDWORD)bytes_read)) + &dw_bytes_read)) { giterr_set(GITERR_OS, "Failed to read data"); return -1; } + *bytes_read = dw_bytes_read; + return 0; } diff --git a/src/util.h b/src/util.h index 4f83d3bc1..3d00e9c85 100644 --- a/src/util.h +++ b/src/util.h @@ -42,12 +42,11 @@ GIT_INLINE(char *) git__strdup(const char *str) GIT_INLINE(char *) git__strndup(const char *str, size_t n) { - size_t length; + size_t length = 0; char *ptr; - length = strlen(str); - if (n < length) - length = n; + while (length < n && str[length]) + ++length; ptr = (char*)malloc(length + 1); if (!ptr) { @@ -55,7 +54,9 @@ GIT_INLINE(char *) git__strndup(const char *str, size_t n) return NULL; } - memcpy(ptr, str, length); + if (length) + memcpy(ptr, str, length); + ptr[length] = '\0'; return ptr;