Commit 705871364bce85f7ef46f7c3f4e680a4591aa304

Vicent Martí 2013-06-17T08:53:22

Merge pull request #1654 from yorah/memzero Memzero stuffs

diff --git a/src/transports/cred.c b/src/transports/cred.c
index 4916c6e..ba5de6e 100644
--- a/src/transports/cred.c
+++ b/src/transports/cred.c
@@ -17,7 +17,7 @@ static void plaintext_free(struct git_cred *cred)
 	git__free(c->username);
 
 	/* Zero the memory which previously held the password */
-	memset(c->password, 0x0, pass_len);
+	git__memzero(c->password, pass_len);
 	git__free(c->password);
 
 	memset(c, 0, sizeof(*c));
@@ -73,7 +73,7 @@ static void ssh_keyfile_passphrase_free(struct git_cred *cred)
 
     if (c->passphrase) {
         /* Zero the memory which previously held the passphrase */
-        memset(c->passphrase, 0x0, pass_len);
+        git__memzero(c->passphrase, pass_len);
         git__free(c->passphrase);
     }
 
diff --git a/src/util.c b/src/util.c
index 1d084da..da15a03 100644
--- a/src/util.c
+++ b/src/util.c
@@ -722,12 +722,3 @@ void git__insertsort_r(
 	if (freeswap)
 		git__free(swapel);
 }
-
-void git__memzero(volatile void *data, size_t size)
-{
-	volatile uint8_t *scan = data;
-	uint8_t *end = scan + size;
-
-	while (scan < end)
-		*scan++ = 0x0;
-}
diff --git a/src/util.h b/src/util.h
index 0de4666..1ef9e65 100644
--- a/src/util.h
+++ b/src/util.h
@@ -325,6 +325,16 @@ extern size_t git__unescape(char *str);
  * Safely zero-out memory, making sure that the compiler
  * doesn't optimize away the operation.
  */
-extern void git__memzero(volatile void *data, size_t size);
+GIT_INLINE(void) git__memzero(void *data, size_t size)
+{
+#ifdef _MSC_VER
+	SecureZeroMemory((PVOID)data, size);
+#else
+	volatile uint8_t *scan = (volatile uint8_t *)data;
+
+	while (size--)
+		*scan++ = 0x0;
+#endif
+}
 
 #endif /* INCLUDE_util_h__ */