summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYouness Alaoui <youness.alaoui@collabora.co.uk>2009-05-15 16:51:19 -0400
committerYouness Alaoui <youness.alaoui@collabora.co.uk>2009-05-15 16:51:19 -0400
commita647036cc2ffd012aa27a5aceb582dbec4e02908 (patch)
treebeeea10f0410a5fbb53c7da6b4213e35a6b8588f
parent2dc51dd933dbef2dd7dd53f72d7d1f22eca58db4 (diff)
downloadlibnice-a647036cc2ffd012aa27a5aceb582dbec4e02908.tar.gz
fix a possible crash if the address is invalid
-rw-r--r--agent/agent.c39
1 files changed, 21 insertions, 18 deletions
diff --git a/agent/agent.c b/agent/agent.c
index 1807dd7..6ceed80 100644
--- a/agent/agent.c
+++ b/agent/agent.c
@@ -1174,9 +1174,11 @@ static void _upnp_mapped_external_port (GUPnPSimpleIgd *self, gchar *proto,
nice_debug ("Agent %p : Sucessfully mapped %s:%d to %s:%d", agent, local_ip,
local_port, external_ip, external_port);
- nice_address_set_from_string (&localaddr, local_ip);
+ if (!nice_address_set_from_string (&localaddr, local_ip))
+ goto end;
nice_address_set_port (&localaddr, local_port);
- nice_address_set_from_string (&externaddr, external_ip);
+ if (!nice_address_set_from_string (&externaddr, external_ip))
+ goto end;
nice_address_set_port (&externaddr, external_port);
for (i = agent->upnp_mapping; i; i = i->next) {
@@ -1234,25 +1236,26 @@ static void _upnp_error_mapping_port (GUPnPSimpleIgd *self, GError *error,
nice_debug ("Agent %p : Error mapping %s:%d to %d (%d) : %s", agent, local_ip,
local_port, external_port, error->domain, error->message);
- nice_address_set_from_string (&localaddr, local_ip);
- nice_address_set_port (&localaddr, local_port);
-
- for (i = agent->upnp_mapping; i; i = i->next) {
- NiceAddress *addr = i->data;
- if (nice_address_equal (&localaddr, addr)) {
- agent->upnp_mapping = g_slist_remove (agent->upnp_mapping, addr);
- nice_address_free (addr);
- break;
+ if (nice_address_set_from_string (&localaddr, local_ip)) {
+ nice_address_set_port (&localaddr, local_port);
+
+ for (i = agent->upnp_mapping; i; i = i->next) {
+ NiceAddress *addr = i->data;
+ if (nice_address_equal (&localaddr, addr)) {
+ agent->upnp_mapping = g_slist_remove (agent->upnp_mapping, addr);
+ nice_address_free (addr);
+ break;
+ }
}
- }
- if (g_slist_length (agent->upnp_mapping)) {
- if (agent->upnp_timer_source != NULL) {
- g_source_destroy (agent->upnp_timer_source);
- g_source_unref (agent->upnp_timer_source);
- agent->upnp_timer_source = NULL;
+ if (g_slist_length (agent->upnp_mapping)) {
+ if (agent->upnp_timer_source != NULL) {
+ g_source_destroy (agent->upnp_timer_source);
+ g_source_unref (agent->upnp_timer_source);
+ agent->upnp_timer_source = NULL;
+ }
+ agent_gathering_done (agent);
}
- agent_gathering_done (agent);
}
g_static_rec_mutex_unlock (&agent->mutex);