[pulseaudio-discuss] [PATCH] modargs: Fix get_sample_rate if no "rate" is present in the modarg

poljar (Damir Jelić) poljarinho at gmail.com
Sun Dec 8 16:19:27 PST 2013


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.

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;
 }
 
-- 
1.8.5.1



More information about the pulseaudio-discuss mailing list