Fix incorrect loop condition in egg_hkdf_perform()
authorXi Wang <xi.wang@gmail.com>
Mon, 22 Oct 2012 20:09:46 +0000 (16:09 -0400)
committerStef Walter <stefw@gnome.org>
Tue, 23 Oct 2012 19:41:38 +0000 (21:41 +0200)
This does not cause a change in behavior (as evidenced by tests,
at least on linux when built with gcc) but is more correct code,
and less likely to be miscompiled.

The condition (i < 256) in the following loop is always false since i
is of type guchar, which is at most 255.

guchar i;
...
for (i = 1; i < 256; ++i) { ... }

This patch changes i to a larger type gint.

Also in the loop we have:

gcry_md_write (md2, &i, 1);

change it to use gcry_md_putc().

egg/egg-hkdf.c

index e79b9d4..bc2919a 100644 (file)
@@ -39,7 +39,7 @@ egg_hkdf_perform (const gchar *hash_algo, gconstpointer input, gsize n_input,
        gpointer buffer = NULL;
        gcry_md_hd_t md1, md2;
        guint hash_len;
-       guchar i;
+       gint i;
        gint flags, algo;
        gsize step, n_buffer;
        guchar *at;
@@ -89,7 +89,7 @@ egg_hkdf_perform (const gchar *hash_algo, gconstpointer input, gsize n_input,
                gcry_md_reset (md2);
                gcry_md_write (md2, buffer, n_buffer);
                gcry_md_write (md2, info, n_info);
-               gcry_md_write (md2, &i, 1);
+               gcry_md_putc (md2, i);
 
                n_buffer = hash_len;
                memcpy (buffer, gcry_md_read (md2, algo), n_buffer);