summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Henningsson <david.henningsson@canonical.com>2012-03-16 14:38:38 +0100
committerDavid Henningsson <david.henningsson@canonical.com>2012-03-19 09:01:29 +0100
commit54cddc6ddf075b6248b0b8521120b2bd86049978 (patch)
tree09cbf4e1da1a76ab1113bbafa8fba7eb6a429951
parent860d1cf3a76701ade38784822abb24285176227c (diff)
protocol-native: Protect against clients trying to set a NULL port
For some reason, a badly behaving client was trying to set a NULL port, which caused PulseAudio to crash. Add safeguards on two levels just to be protected. (Also remove a redundant check.) BugLink: https://bugs.launchpad.net/bugs/951273 Signed-off-by: David Henningsson <david.henningsson@canonical.com>
-rw-r--r--src/pulsecore/protocol-native.c2
-rw-r--r--src/pulsecore/sink.c2
-rw-r--r--src/pulsecore/source.c2
3 files changed, 3 insertions, 3 deletions
diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c
index e4e18090..34fff6e7 100644
--- a/src/pulsecore/protocol-native.c
+++ b/src/pulsecore/protocol-native.c
@@ -4699,7 +4699,7 @@ static void command_set_sink_or_source_port(pa_pdispatch *pd, uint32_t command,
CHECK_VALIDITY(c->pstream, !name || pa_namereg_is_valid_name_or_wildcard(name, command == PA_COMMAND_SET_SINK_PORT ? PA_NAMEREG_SINK : PA_NAMEREG_SOURCE), tag, PA_ERR_INVALID);
CHECK_VALIDITY(c->pstream, idx != PA_INVALID_INDEX || name, tag, PA_ERR_INVALID);
CHECK_VALIDITY(c->pstream, idx == PA_INVALID_INDEX || !name, tag, PA_ERR_INVALID);
- CHECK_VALIDITY(c->pstream, !name || idx == PA_INVALID_INDEX, tag, PA_ERR_INVALID);
+ CHECK_VALIDITY(c->pstream, port, tag, PA_ERR_INVALID);
if (command == PA_COMMAND_SET_SINK_PORT) {
pa_sink *sink;
diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c
index aed1f381..2d214cf0 100644
--- a/src/pulsecore/sink.c
+++ b/src/pulsecore/sink.c
@@ -3236,7 +3236,7 @@ int pa_sink_set_port(pa_sink *s, const char *name, pa_bool_t save) {
return -PA_ERR_NOTIMPLEMENTED;
}
- if (!s->ports)
+ if (!s->ports || !name)
return -PA_ERR_NOENTITY;
if (!(port = pa_hashmap_get(s->ports, name)))
diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c
index ab75b216..a5d5af0b 100644
--- a/src/pulsecore/source.c
+++ b/src/pulsecore/source.c
@@ -2506,7 +2506,7 @@ int pa_source_set_port(pa_source *s, const char *name, pa_bool_t save) {
return -PA_ERR_NOTIMPLEMENTED;
}
- if (!s->ports)
+ if (!s->ports || !name)
return -PA_ERR_NOENTITY;
if (!(port = pa_hashmap_get(s->ports, name)))