From 6041fc7042dee8e8988fd67fa0b790b9ab4db651 Mon Sep 17 00:00:00 2001 From: David Henningsson Date: Mon, 28 Mar 2011 15:16:12 +0200 Subject: module-jack-sink/source: protect against null return in jack_get_ports Just picking up a crash report from Ubuntu, here's the result. -- David Henningsson, Canonical Ltd. http://launchpad.net/~diwic From 934c52c79bb6faed56a64d6e15f9b285f687afee Mon Sep 17 00:00:00 2001 From: David Henningsson Date: Mon, 28 Mar 2011 14:30:44 +0200 Subject: [PATCH] module-jack-sink/source: protect against null return in jack_get_ports According to jack_get_ports documentation, it seems like returning NULL is valid, and that it should be freed using jack_free. Reported-by: Grayson Peddie BugLink: http://bugs.launchpad.net/bugs/733424 Signed-off-by: David Henningsson --- src/modules/jack/module-jack-sink.c | 13 ++++++++----- src/modules/jack/module-jack-source.c | 13 ++++++++----- 2 files changed, 16 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/modules/jack/module-jack-sink.c b/src/modules/jack/module-jack-sink.c index 0b4e7ee4..dfb5be1a 100644 --- a/src/modules/jack/module-jack-sink.c +++ b/src/modules/jack/module-jack-sink.c @@ -343,8 +343,9 @@ int pa__init(pa_module*m) { ports = jack_get_ports(u->client, NULL, JACK_DEFAULT_AUDIO_TYPE, JackPortIsPhysical|JackPortIsInput); channels = 0; - for (p = ports; *p; p++) - channels++; + if (ports) + for (p = ports; *p; p++) + channels++; if (!channels) channels = m->core->default_sample_spec.channels; @@ -432,7 +433,7 @@ int pa__init(pa_module*m) { if (do_connect) { for (i = 0, p = ports; i < ss.channels; i++, p++) { - if (!*p) { + if (!p || !*p) { pa_log("Not enough physical output ports, leaving unconnected."); break; } @@ -448,7 +449,8 @@ int pa__init(pa_module*m) { pa_sink_put(u->sink); - free(ports); + if (ports) + jack_free(ports); pa_modargs_free(ma); return 0; @@ -457,7 +459,8 @@ fail: if (ma) pa_modargs_free(ma); - free(ports); + if (ports) + jack_free(ports); pa__done(m); diff --git a/src/modules/jack/module-jack-source.c b/src/modules/jack/module-jack-source.c index 6b128402..8453bd97 100644 --- a/src/modules/jack/module-jack-source.c +++ b/src/modules/jack/module-jack-source.c @@ -289,8 +289,9 @@ int pa__init(pa_module*m) { ports = jack_get_ports(u->client, NULL, JACK_DEFAULT_AUDIO_TYPE, JackPortIsPhysical|JackPortIsOutput); channels = 0; - for (p = ports; *p; p++) - channels++; + if (ports) + for (p = ports; *p; p++) + channels++; if (!channels) channels = m->core->default_sample_spec.channels; @@ -376,7 +377,7 @@ int pa__init(pa_module*m) { if (do_connect) { for (i = 0, p = ports; i < ss.channels; i++, p++) { - if (!*p) { + if (!p || !*p) { pa_log("Not enough physical output ports, leaving unconnected."); break; } @@ -393,7 +394,8 @@ int pa__init(pa_module*m) { pa_source_put(u->source); - free(ports); + if (ports) + jack_free(ports); pa_modargs_free(ma); return 0; @@ -402,7 +404,8 @@ fail: if (ma) pa_modargs_free(ma); - free(ports); + if (ports) + jack_free(ports); pa__done(m); -- cgit