mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-20 02:09:24 +01:00
Be more robust to bad circwindow values
If the networkstatus consensus tells us that we should use a negative circuit package window, ignore it. Otherwise we'll believe it and then trigger an assert. Also, change the interface for networkstatus_get_param() so we don't have to lookup the consensus beforehand.
This commit is contained in:
parent
6acfa31d59
commit
0d13e0ed14
@ -1,4 +1,9 @@
|
||||
Changes in version 0.2.2.3-alpha - 2009-??-??
|
||||
Changes in version 0.2.2.3-alpha - 2009-09-23
|
||||
o Minor bugfixes:
|
||||
- If the networkstatus consensus tells us that we should use a
|
||||
negative circuit package window, ignore it. Otherwise we'll
|
||||
believe it and then trigger an assert.
|
||||
|
||||
|
||||
Changes in version 0.2.2.2-alpha - 2009-09-21
|
||||
o Major features:
|
||||
|
@ -367,10 +367,11 @@ circuit_purpose_to_controller_string(uint8_t purpose)
|
||||
int32_t
|
||||
circuit_initial_package_window(void)
|
||||
{
|
||||
networkstatus_t *consensus = networkstatus_get_latest_consensus();
|
||||
if (consensus)
|
||||
return networkstatus_get_param(consensus, "circwindow", CIRCWINDOW_START);
|
||||
return CIRCWINDOW_START;
|
||||
int32_t num = networkstatus_get_param(NULL, "circwindow", CIRCWINDOW_START);
|
||||
/* If the consensus tells us a negative number, we'd assert. */
|
||||
if (num < 0)
|
||||
num = CIRCWINDOW_START;
|
||||
return num;
|
||||
}
|
||||
|
||||
/** Initialize the common elements in a circuit_t, and add it to the global
|
||||
|
@ -1894,14 +1894,18 @@ networkstatus_dump_bridge_status_to_file(time_t now)
|
||||
}
|
||||
|
||||
/** Return the value of a integer parameter from the networkstatus <b>ns</b>
|
||||
* whose name is <b>param_name</b>. Return <b>default_val</b> if ns is NULL,
|
||||
* or if it has no parameter called <b>param_name</b>. */
|
||||
* whose name is <b>param_name</b>. If <b>ns</b> is NULL, try loading the
|
||||
* latest consensus ourselves. Return <b>default_val</b> if no latest
|
||||
* consensus, or if it has no parameter called <b>param_name</b>. */
|
||||
int32_t
|
||||
networkstatus_get_param(networkstatus_t *ns, const char *param_name,
|
||||
int32_t default_val)
|
||||
{
|
||||
size_t name_len;
|
||||
|
||||
if (!ns) /* if they pass in null, go find it ourselves */
|
||||
ns = networkstatus_get_latest_consensus();
|
||||
|
||||
if (!ns || !ns->net_params)
|
||||
return default_val;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user