diff options
author | Olivier Crête <olivier.crete@collabora.com> | 2014-03-27 17:55:01 -0400 |
---|---|---|
committer | Olivier Crête <olivier.crete@collabora.com> | 2014-03-27 18:05:41 -0400 |
commit | 5987a939e61b034d675c0227b0b5be7748c7754f (patch) | |
tree | f18ffddeb3c3d0e0b5d558c6b5c12f20b3b237db /agent | |
parent | 01c5ef0496e3e7b7796e8a374bb8c23cc4612169 (diff) | |
download | libnice-5987a939e61b034d675c0227b0b5be7748c7754f.tar.gz |
agent: Bail out early on empty message
This can happen if a lower layer has consumed the message, bail out earlier in
that case.
Diffstat (limited to 'agent')
-rw-r--r-- | agent/agent.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/agent/agent.c b/agent/agent.c index 569c66e..03ae14a 100644 --- a/agent/agent.c +++ b/agent/agent.c @@ -2726,7 +2726,12 @@ agent_recv_message_unlocked ( goto done; } - if (nice_debug_is_enabled () && message->length > 0) { + if (retval == RECV_OOB || message->length == 0) { + retval = RECV_OOB; + goto done; + } + + if (nice_debug_is_enabled ()) { gchar tmpbuf[INET6_ADDRSTRLEN]; nice_address_to_string (message->from, tmpbuf); nice_debug ("Agent %p : Packet received on local socket %d from [%s]:%u (%" G_GSSIZE_FORMAT " octets).", agent, @@ -2750,11 +2755,16 @@ agent_recv_message_unlocked ( if (cand->type == NICE_CANDIDATE_TYPE_RELAYED && cand->stream_id == stream->id && cand->component_id == component->id) { - nice_turn_socket_parse_recv_message (cand->sockptr, &socket, message); + retval = nice_turn_socket_parse_recv_message (cand->sockptr, &socket, + message); + break; } } } + if (retval == RECV_OOB) + goto done; + agent->media_after_tick = TRUE; /* If the message’s stated length is equal to its actual length, it’s probably @@ -2806,7 +2816,7 @@ agent_recv_message_unlocked ( nice_debug ("%s: Queued %" G_GSSIZE_FORMAT " bytes for agent %p.", G_STRFUNC, vec->size, agent); - return 0; + return RECV_OOB; } else { process_queued_tcp_packets (agent, stream, component); } |