diff options
| author | Michael Biebl <biebl@debian.org> | 2017-01-17 20:25:09 +0100 |
|---|---|---|
| committer | Michael Biebl <biebl@debian.org> | 2017-01-17 20:25:09 +0100 |
| commit | 58f8be580039b0575b197b9573a1c92745d96d30 (patch) | |
| tree | 2c226233f623a0dcb529be0eb8cdf97e4a2ae0c0 /libnm-core/crypto.c | |
| parent | 45cb5bb3c0e6edb887cf69b417fcaf7053814a9b (diff) | |
New upstream version 1.5.90 upstream/1.5.90
Diffstat (limited to 'libnm-core/crypto.c')
| -rw-r--r-- | libnm-core/crypto.c | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/libnm-core/crypto.c b/libnm-core/crypto.c index e734f40d..c4e48475 100644 --- a/libnm-core/crypto.c +++ b/libnm-core/crypto.c @@ -771,13 +771,12 @@ crypto_md5_hash (const char *salt, gsize buflen) { GChecksum *ctx; - int nkey = buflen; gsize digest_len; - int count = 0; char digest[16]; - char *p = buffer; + gsize bufidx = 0; + int i; - g_assert_cmpint (g_checksum_type_get_length (G_CHECKSUM_MD5), ==, sizeof (digest)); + nm_assert (g_checksum_type_get_length (G_CHECKSUM_MD5) == sizeof (digest)); g_return_if_fail (password_len == 0 || password); g_return_if_fail (buffer != NULL); @@ -791,12 +790,7 @@ crypto_md5_hash (const char *salt, if (password_len < 0) password_len = strlen (password); - while (nkey > 0) { - int i = 0; - - g_checksum_reset (ctx); - if (count++) - g_checksum_update (ctx, (const guchar *) digest, sizeof (digest)); + for (;;) { if (password_len > 0) g_checksum_update (ctx, (const guchar *) password, password_len); if (salt_len > 0) @@ -804,14 +798,19 @@ crypto_md5_hash (const char *salt, digest_len = sizeof (digest); g_checksum_get_digest (ctx, (guchar *) digest, &digest_len); - g_assert (digest_len == sizeof (digest)); + nm_assert (digest_len == sizeof (digest)); - while (nkey && (i < sizeof (digest))) { - *(p++) = digest[i++]; - nkey--; + for (i = 0; i < sizeof (digest); i++) { + if (bufidx >= buflen) + goto done; + buffer[bufidx++] = digest[i]; } + + g_checksum_reset (ctx); + g_checksum_update (ctx, (const guchar *) digest, sizeof (digest)); } +done: memset (digest, 0, sizeof (digest)); g_checksum_free (ctx); } |