diff options
author | Christian Grothoff <christian@grothoff.org> | 2012-09-27 13:02:21 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2012-09-27 13:02:21 +0000 |
commit | a8fe2629a1b0272ef2d0f55f01c4b8bee35541c9 (patch) | |
tree | 491f3be523050a470c6bafa730ce65017592dfa3 | |
parent | fa020943de61fe7177c9e65aca57b436305c6a14 (diff) |
-use new cancel API, fix use after free
-rw-r--r-- | src/gns/gnunet-dns2gns.c | 4 | ||||
-rw-r--r-- | src/gns/gnunet-service-gns_resolver.c | 2 |
2 files changed, 5 insertions, 1 deletions
diff --git a/src/gns/gnunet-dns2gns.c b/src/gns/gnunet-dns2gns.c index de3ede6e23..67f7e4ac1b 100644 --- a/src/gns/gnunet-dns2gns.c +++ b/src/gns/gnunet-dns2gns.c @@ -217,6 +217,8 @@ do_timeout (void *cls, GNUNET_DNSPARSER_free_packet (request->packet); if (NULL != request->lookup) GNUNET_GNS_cancel_lookup_request (request->lookup); + if (NULL != request->dns_lookup) + GNUNET_DNSSTUB_resolve_cancel (request->dns_lookup); GNUNET_free (request); } @@ -237,10 +239,12 @@ dns_result_processor (void *cls, size_t r) { struct Request *request = cls; + request->packet = GNUNET_DNSPARSER_parse ((char*)dns, r); send_response (request); } + /** * Iterator called on obtained result for a GNS * lookup diff --git a/src/gns/gnunet-service-gns_resolver.c b/src/gns/gnunet-service-gns_resolver.c index c6538aba06..11ea5a993d 100644 --- a/src/gns/gnunet-service-gns_resolver.c +++ b/src/gns/gnunet-service-gns_resolver.c @@ -4186,9 +4186,9 @@ gns_resolver_shorten_name (struct GNUNET_CRYPTO_ShortHashCode *zone, else { GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Unknown TLD in %s\n", name); + GNUNET_CONTAINER_DLL_remove (nsh_head, nsh_tail, rh); GNUNET_free (rh); GNUNET_free (nsh); - GNUNET_CONTAINER_DLL_remove (nsh_head, nsh_tail, rh); proc (proc_cls, name); return; } |