g_return_val_if_fail (hmac != NULL, NULL);
copy = g_slice_new (GHmac);
+ copy->ref_count = 1;
copy->digest_type = hmac->digest_type;
copy->digesti = g_checksum_copy (hmac->digesti);
copy->digesto = g_checksum_copy (hmac->digesto);
g_return_val_if_fail (hmac != NULL, NULL);
digest_len = g_checksum_type_get_length (hmac->digest_type);
- buffer = g_malloc (digest_len);
+ buffer = g_alloca (digest_len);
+ /* This is only called for its side-effect of updating hmac->digesto... */
g_hmac_get_digest (hmac, buffer, &digest_len);
+ /* ... because we get the string from the checksum rather than
+ * stringifying buffer ourselves
+ */
return g_checksum_get_string (hmac->digesto);
}