Hello, 

> This patch fixes a bug which was introduced in:
>     e74d4244a285a7e29300c19df7b202ba7c51ecef
> 
> The offending function was introduced in:
>     832ad693f5081b09a36d180f81c19be9092eb2e9
> pa_modargs_get_samplerate() is not safe to be called if the modarg does
> not contain an entry with a "rate" key.

Tanu made a point here
http://lists.freedesktop.org/archives/pulseaudio-discuss/2013-October/019015.html
saying that the function's output 'rate' should only be modified on 
success 

unfortunately the local variable does not get initialized, leading to the 
bug you observed when no "rate" modarg is present

I think the correct way to fix this is to initialize local_rate to rate; 
this matches the logic of pa_modargs_get_sample_spec() and most other 
getter functions, except pa_modargs_get_alternate_sample_rate()

I'll post fixes addressing this issues; there are complains on the mail 
list regarding this issues, sorry for the delay

regards, p.

> pa_modargs_get_value_u32 returns 0 (success) if no value with the
> specified key is found, in this case the rate_local variable inside
> pa_modargs_get_samplerate() remains uninitialized.
 
> This patch modifies the pa_modargs_get_samplerate() function to modify
> the function argument rate. The function must now be called with an
> initialized rate argument.
> ---
>  src/pulsecore/modargs.c | 10 +++-------
>  1 file changed, 3 insertions(+), 7 deletions(-)
> 
> diff --git a/src/pulsecore/modargs.c b/src/pulsecore/modargs.c
> index 432e480..f3bf803 100644
> --- a/src/pulsecore/modargs.c
> +++ b/src/pulsecore/modargs.c
> @@ -365,17 +365,13 @@ int pa_modargs_get_value_volume(pa_modargs *ma, const 
> char *key, pa_volume_t *va
>  }
>  
>  int pa_modargs_get_sample_rate(pa_modargs *ma, uint32_t *rate) {
> -    uint32_t rate_local;
> -
>      pa_assert(rate);
>  
> -    if ((pa_modargs_get_value_u32(ma, "rate", &rate_local)) < 0 ||
> -        rate_local <= 0 ||
> -        rate_local > PA_RATE_MAX)
> +    if ((pa_modargs_get_value_u32(ma, "rate", rate)) < 0 ||
> +        *rate <= 0 ||
> +        *rate > PA_RATE_MAX)
>          return -1;
>  
> -    *rate = rate_local;
> -
>      return 0;
>  }
>  
> 

-- 

Peter Meerwald
+43-664-2444418 (mobile)
_______________________________________________
pulseaudio-discuss mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/pulseaudio-discuss

Reply via email to