summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVicent Martí <vicent@github.com>2012-11-09 13:19:32 -0800
committerVicent Martí <vicent@github.com>2012-11-09 13:19:32 -0800
commit8a328cf442237f65d58ad779d775c77a7c462df5 (patch)
tree9957689a1ef5b5dc0aa239d69dd8c18261533b22
parent39d7cf60de8bed86c69892c3076bd929dce02b8a (diff)
parentfcd03bebbfda5cfc76604645edd85fe030349a1b (diff)
downloadlibgit2-8a328cf442237f65d58ad779d775c77a7c462df5.tar.gz
Merge pull request #1058 from pwkelley/development
Fixes for two segfaults
-rw-r--r--src/cache.c1
-rw-r--r--src/transports/winhttp.c5
-rw-r--r--src/util.h11
3 files changed, 11 insertions, 6 deletions
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;