]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
address/resolve: try harder to avoid returning uninitialised data
authorteor <teor@torproject.org>
Thu, 13 Jun 2019 11:14:36 +0000 (21:14 +1000)
committerNick Mathewson <nickm@torproject.org>
Wed, 26 Jun 2019 13:55:37 +0000 (09:55 -0400)
Cleanup after 30721.

src/lib/net/address.c
src/lib/net/resolve.c

index 4989e4ab2b30e0305d5ca0bd71e4201a28de3e96..75322ad8863089e93ae35c17191407dc2c213db5 100644 (file)
@@ -1760,6 +1760,13 @@ tor_addr_port_parse(int severity, const char *addrport,
   retval = 0;
 
  done:
+  /* Clear the address and port on error, to avoid returning uninitialised or
+   * partly parsed data.
+   */
+  if (retval == -1) {
+    memset(address_out, 0, sizeof(tor_addr_t));
+    *port_out = 0;
+  }
   tor_free(addr_tmp);
   return retval;
 }
@@ -1828,8 +1835,7 @@ tor_addr_port_split(int severity, const char *addrport,
     tor_free(address_);
   }
 
-  if (port_out)
-    *port_out = ok ? ((uint16_t) port_) : 0;
+  *port_out = ok ? ((uint16_t) port_) : 0;
 
   return ok ? 0 : -1;
 }
index a70fb0a823afa88ed06b6c5b82d570ed7deeb973..95557208837457409aa094fca66a451d9400be1a 100644 (file)
@@ -47,6 +47,11 @@ tor_lookup_hostname,(const char *name, uint32_t *addr))
   tor_addr_t myaddr;
   int ret;
 
+  if (BUG(!addr))
+    return -1;
+
+  *addr = 0;
+
   if ((ret = tor_addr_lookup(name, AF_INET, &myaddr)))
     return ret;
 
@@ -250,7 +255,7 @@ int
 tor_addr_port_lookup(const char *s, tor_addr_t *addr_out, uint16_t *port_out)
 {
   tor_addr_t addr;
-  uint16_t portval;
+  uint16_t portval = 0;
   char *tmp = NULL;
   int rv = 0;
 
@@ -273,6 +278,10 @@ tor_addr_port_lookup(const char *s, tor_addr_t *addr_out, uint16_t *port_out)
 
   return 0;
  err:
+  /* Clear the address and port on error */
+  memset(addr_out, 0, sizeof(tor_addr_t));
+  if (port_out)
+    *port_out = 0;
   tor_free(tmp);
   return -1;
 }