]> git.alsa-project.org Git - alsa-lib.git/commitdiff
pcm: avoid endless loop in snd_pcm_sw_params_default()
authorJaroslav Kysela <perex@perex.cz>
Sat, 25 Feb 2023 17:03:37 +0000 (18:03 +0100)
committerJaroslav Kysela <perex@perex.cz>
Sat, 25 Feb 2023 17:03:46 +0000 (18:03 +0100)
BugLink: https://lore.kernel.org/alsa-devel/167734349294.22.1388671545195719262@mailman-web.alsa-project.org/
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
src/pcm/pcm_params.c

index 8140c061fe6b72e7207575a60033de4e0bf97a96..26c701328bfd42ee1e107151e8f0a934cb2eb660 100644 (file)
@@ -2335,6 +2335,9 @@ static int snd_pcm_sw_params_default(snd_pcm_t *pcm, snd_pcm_sw_params_t *params
        params->silence_threshold = 0;
        params->silence_size = 0;
        params->boundary = pcm->buffer_size;
+       /* this should not happen (bad child?) */
+       if (params->boundary == 0)
+               return -EINVAL;
        while (params->boundary * 2 <= LONG_MAX - pcm->buffer_size)
                params->boundary *= 2;
        return 0;
@@ -2431,7 +2434,9 @@ int _snd_pcm_hw_params_internal(snd_pcm_t *pcm, snd_pcm_hw_params_t *params)
        
        /* Default sw params */
        memset(&sw, 0, sizeof(sw));
-       snd_pcm_sw_params_default(pcm, &sw);
+       err = snd_pcm_sw_params_default(pcm, &sw);
+       if (err < 0)
+               return err;
        err = snd_pcm_sw_params(pcm, &sw);
        if (err < 0)
                return err;