From: Takashi Iwai Date: Tue, 24 Sep 2019 11:48:37 +0000 (+0200) Subject: pcm: chmap: Fix memory leak at snd_pcm_set_chmap() X-Git-Tag: v1.2.1~36 X-Git-Url: https://git.alsa-project.org/?a=commitdiff_plain;h=0732e47e6b471fee956c260ca512de52f3782e7e;p=alsa-lib.git pcm: chmap: Fix memory leak at snd_pcm_set_chmap() snd_pcm_set_chmap() leaks the memory returned from snd_pcm_get_chmap() without releasing. Add the missing free() call as well as a slight code refactoring. Reported-by: Conrad Jones BugLink: https://github.com/alsa-project/alsa-lib/pull/11 Fixes: d20e24e5d161 ("chmap: Always succeed setting the map to what it already is") Signed-off-by: Takashi Iwai --- diff --git a/src/pcm/pcm.c b/src/pcm/pcm.c index 178d4387..d6bf31ac 100644 --- a/src/pcm/pcm.c +++ b/src/pcm/pcm.c @@ -8099,8 +8099,13 @@ snd_pcm_chmap_t *snd_pcm_get_chmap(snd_pcm_t *pcm) */ int snd_pcm_set_chmap(snd_pcm_t *pcm, const snd_pcm_chmap_t *map) { - const snd_pcm_chmap_t *oldmap = snd_pcm_get_chmap(pcm); - if (oldmap && chmap_equal(oldmap, map)) + const snd_pcm_chmap_t *oldmap; + int nochange; + + oldmap = snd_pcm_get_chmap(pcm); + nochange = (oldmap && chmap_equal(oldmap, map)); + free((void *)oldmap); + if (nochange) return 0; if (!pcm->ops->set_chmap)