瀏覽代碼

Notice a little faster if we're running out of virtual addresses

We were not decrementing "available" every time we did
++next_virtual_addr in addressmap_get_virtual_address: we left out the
--available when we skipped .00 and .255 addresses.

This didn't actually cause a bug in most cases, since the failure mode
was to keep looping around the virtual addresses until we found one,
or until available hit zero.  It could have given you an infinite loop
rather than a useful message, however, if you said "VirtualAddrNetwork
127.0.0.255/32" or something broken like that.

Spotted by cypherpunks
Nick Mathewson 14 年之前
父節點
當前提交
2008728df7
共有 1 個文件被更改,包括 4 次插入0 次删除
  1. 4 0
      src/or/connection_edge.c

+ 4 - 0
src/or/connection_edge.c

@@ -1169,6 +1169,10 @@ addressmap_get_virtual_address(int type)
       while ((next_virtual_addr & 0xff) == 0 ||
              (next_virtual_addr & 0xff) == 0xff) {
         ++next_virtual_addr;
+        if (! --available) {
+          log_warn(LD_CONFIG, "Ran out of virtual addresses!");
+          return NULL;
+        }
       }
       in.s_addr = htonl(next_virtual_addr);
       tor_inet_ntoa(&in, buf, sizeof(buf));