mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-27 22:03:31 +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
|
Changes in version 0.2.2.2-alpha - 2009-09-21
|
||||||
o Major features:
|
o Major features:
|
||||||
|
@ -367,10 +367,11 @@ circuit_purpose_to_controller_string(uint8_t purpose)
|
|||||||
int32_t
|
int32_t
|
||||||
circuit_initial_package_window(void)
|
circuit_initial_package_window(void)
|
||||||
{
|
{
|
||||||
networkstatus_t *consensus = networkstatus_get_latest_consensus();
|
int32_t num = networkstatus_get_param(NULL, "circwindow", CIRCWINDOW_START);
|
||||||
if (consensus)
|
/* If the consensus tells us a negative number, we'd assert. */
|
||||||
return networkstatus_get_param(consensus, "circwindow", CIRCWINDOW_START);
|
if (num < 0)
|
||||||
return CIRCWINDOW_START;
|
num = CIRCWINDOW_START;
|
||||||
|
return num;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Initialize the common elements in a circuit_t, and add it to the global
|
/** 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>
|
/** 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,
|
* whose name is <b>param_name</b>. If <b>ns</b> is NULL, try loading the
|
||||||
* or if it has no parameter called <b>param_name</b>. */
|
* 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
|
int32_t
|
||||||
networkstatus_get_param(networkstatus_t *ns, const char *param_name,
|
networkstatus_get_param(networkstatus_t *ns, const char *param_name,
|
||||||
int32_t default_val)
|
int32_t default_val)
|
||||||
{
|
{
|
||||||
size_t name_len;
|
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)
|
if (!ns || !ns->net_params)
|
||||||
return default_val;
|
return default_val;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user