diff options
author | Moon <moon@140774ce-b5e7-0310-ab8b-a85725594a96> | 2009-10-26 11:09:08 +0000 |
---|---|---|
committer | Moon <moon@140774ce-b5e7-0310-ab8b-a85725594a96> | 2009-10-26 11:09:08 +0000 |
commit | b345c3944f70c14f0576c472c9cd55b551797c42 (patch) | |
tree | dfca7009ebd87b878a05eaf3f373d028f1b50ae3 /src/nat | |
parent | ce7d5f88fdbb4094571d436c509d7f42c03ab12a (diff) | |
download | gnunet-b345c3944f70c14f0576c472c9cd55b551797c42.tar.gz gnunet-b345c3944f70c14f0576c472c9cd55b551797c42.zip |
fix handling of NULL addr argument
Diffstat (limited to 'src/nat')
-rw-r--r-- | src/nat/nat.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/nat/nat.c b/src/nat/nat.c index dbe4ef643..c7a1fd858 100644 --- a/src/nat/nat.c +++ b/src/nat/nat.c | |||
@@ -312,17 +312,25 @@ GNUNET_NAT_register (struct GNUNET_SCHEDULER_Handle *sched, | |||
312 | { | 312 | { |
313 | GNUNET_assert (addr->sa_family == AF_INET | 313 | GNUNET_assert (addr->sa_family == AF_INET |
314 | || addr->sa_family == AF_INET6); | 314 | || addr->sa_family == AF_INET6); |
315 | nat->local_addr = GNUNET_malloc (addrlen); | ||
316 | memcpy (nat->local_addr, addr, addrlen); | ||
317 | |||
315 | if (addr->sa_family == AF_INET) | 318 | if (addr->sa_family == AF_INET) |
316 | { | 319 | { |
317 | nat->public_port = ntohs (((struct sockaddr_in *) addr)->sin_port); | 320 | nat->public_port = ntohs (((struct sockaddr_in *) addr)->sin_port); |
318 | // ((struct sockaddr_in *) addr)->sin_port = 0; | 321 | ((struct sockaddr_in *) nat->local_addr)->sin_port = 0; |
319 | } | 322 | } |
320 | else if (addr->sa_family == AF_INET6) | 323 | else if (addr->sa_family == AF_INET6) |
321 | { | 324 | { |
322 | nat->public_port = ntohs (((struct sockaddr_in6 *) addr)->sin6_port); | 325 | nat->public_port = ntohs (((struct sockaddr_in6 *) addr)->sin6_port); |
323 | // ((struct sockaddr_in6 *) addr)->sin6_port = 0; | 326 | ((struct sockaddr_in6 *) nat->local_addr)->sin6_port = 0; |
324 | } | 327 | } |
325 | } | 328 | } |
329 | else | ||
330 | { | ||
331 | nat->local_addr = NULL; | ||
332 | nat->public_port = 0; | ||
333 | } | ||
326 | 334 | ||
327 | nat->should_change = GNUNET_YES; | 335 | nat->should_change = GNUNET_YES; |
328 | nat->sched = sched; | 336 | nat->sched = sched; |
@@ -333,8 +341,6 @@ GNUNET_NAT_register (struct GNUNET_SCHEDULER_Handle *sched, | |||
333 | nat->callback_cls = callback_cls; | 341 | nat->callback_cls = callback_cls; |
334 | nat->ext_addr = NULL; | 342 | nat->ext_addr = NULL; |
335 | nat->contact_addr = NULL; | 343 | nat->contact_addr = NULL; |
336 | nat->local_addr = GNUNET_malloc (addrlen); | ||
337 | memcpy (nat->local_addr, addr, addrlen); | ||
338 | nat->natpmp = GNUNET_NAT_NATPMP_init (nat->local_addr, addrlen, nat->public_port); | 344 | nat->natpmp = GNUNET_NAT_NATPMP_init (nat->local_addr, addrlen, nat->public_port); |
339 | nat->upnp = GNUNET_NAT_UPNP_init (nat->local_addr, addrlen, nat->public_port); | 345 | nat->upnp = GNUNET_NAT_UPNP_init (nat->local_addr, addrlen, nat->public_port); |
340 | 346 | ||