]> git.alsa-project.org Git - alsa-lib.git/commitdiff
topology: builder: Fix possibly uninitialized variable in write_elem_block()
authorTakashi Iwai <tiwai@suse.de>
Tue, 8 Sep 2015 20:04:48 +0000 (22:04 +0200)
committerTakashi Iwai <tiwai@suse.de>
Tue, 8 Sep 2015 20:08:22 +0000 (22:08 +0200)
When an empty list is passed to write_elem_block(), it may leave
vendor_type uninitialized.
  builder.c: In function ‘write_elem_block’:
  builder.c:127:8: warning: ‘vendor_type’ may be used uninitialized in this function [-Wmaybe-uninitialized]
    ret = write_block_header(tplg, tplg_type, vendor_type,
          ^
  builder.c:114:33: note: ‘vendor_type’ was declared here
    int ret, wsize = 0, count = 0, vendor_type;
                                   ^

Add an immediate return for count = 0 for avoiding it, and simplify
the code initializing vendor_type without using a one-shot loop.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
src/topology/builder.c

index 3bccd44827ccb22da82650dc1ccd1dfa6fd774a6..91412aadd098f6e5523a3e0b98b5f7d3cda1af11 100644 (file)
@@ -116,13 +116,12 @@ static int write_elem_block(snd_tplg_t *tplg,
        /* count number of elements */
        list_for_each(pos, base)
                count++;
+       if (!count)
+               return 0;
 
        /* write the header for this block */
-       list_for_each(pos, base) {
-               elem = list_entry(pos, struct tplg_elem, list);
-               vendor_type = elem->vendor_type;
-               break;
-       }
+       elem = list_entry(base->next, struct tplg_elem, list);
+       vendor_type = elem->vendor_type;
 
        ret = write_block_header(tplg, tplg_type, vendor_type,
                SND_SOC_TPLG_ABI_VERSION, 0, size, count);