[pulseaudio-discuss] [PATCH] echo-cancel test: fix segfault if invalid AEC method is given and handle mem leaks due to open files

Peter Meerwald pmeerw at pmeerw.net
Tue Dec 13 06:51:54 PST 2011


From: Peter Meerwald <p.meerwald at bct-electronic.com>

---
 src/modules/echo-cancel/module-echo-cancel.c |   16 ++++++++++------
 1 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/src/modules/echo-cancel/module-echo-cancel.c b/src/modules/echo-cancel/module-echo-cancel.c
index 00cb2e3..96b652f 100644
--- a/src/modules/echo-cancel/module-echo-cancel.c
+++ b/src/modules/echo-cancel/module-echo-cancel.c
@@ -1709,7 +1709,7 @@ int pa__init(pa_module*m) {
         goto fail;
     }
 
-    if (init_common(ma, u, &source_ss, &source_map))
+    if (init_common(ma, u, &source_ss, &source_map) < 0)
         goto fail;
 
     u->asyncmsgq = pa_asyncmsgq_new(0);
@@ -2092,7 +2092,8 @@ int main(int argc, char* argv[]) {
     source_ss.channels = DEFAULT_CHANNELS;
     pa_channel_map_init_auto(&source_map, source_ss.channels, PA_CHANNEL_MAP_DEFAULT);
 
-    init_common(ma, &u, &source_ss, &source_map);
+    if (init_common(ma, &u, &source_ss, &source_map) < 0)
+        goto fail;
 
     if (!u.ec->init(u.core, u.ec, &source_ss, &source_map, &sink_ss, &sink_map, &u.blocksize,
                      (argc > 4) ? argv[5] : NULL )) {
@@ -2184,13 +2185,16 @@ int main(int argc, char* argv[]) {
 
     u.ec->done(u.ec);
 
-    fclose(u.captured_file);
-    fclose(u.played_file);
-    fclose(u.canceled_file);
+out:
+    if (u.captured_file)
+        fclose(u.captured_file);
+    if (u.played_file)
+        fclose(u.played_file);
+    if (u.canceled_file)
+        fclose(u.canceled_file);
     if (u.drift_file)
         fclose(u.drift_file);
 
-out:
     pa_xfree(rdata);
     pa_xfree(pdata);
     pa_xfree(cdata);
-- 
1.7.4.1



More information about the pulseaudio-discuss mailing list