Fix crash when starting with LearnCircuitBuildTimeout 0.

Before we've set our options, we can neither call get_options() nor
networkstatus_get_latest_consensus().

Fixes bug 22252; bugfix on 4d9d2553ba
in 0.2.9.3-alpha.
This commit is contained in:
Nick Mathewson 2017-05-16 11:20:12 -04:00
parent a7bcab2639
commit 2ba58f275c
4 changed files with 17 additions and 3 deletions

3
changes/bug22252 Normal file
View File

@ -0,0 +1,3 @@
o Minor bugfixes (configuration):
- Do not crash when starting with LearnCircuitBuildTimeout 0.
Fixes bug 22252; bugfix on 0.2.9.3-alpha.

View File

@ -106,12 +106,20 @@ get_circuit_build_timeout_ms(void)
*/ */
int int
circuit_build_times_disabled(void) circuit_build_times_disabled(void)
{
return circuit_build_times_disabled_(get_options());
}
/** As circuit_build_times_disabled, but take options as an argument. */
int
circuit_build_times_disabled_(const or_options_t *options,
int ignore_consensus)
{ {
if (unit_tests) { if (unit_tests) {
return 0; return 0;
} else { } else {
const or_options_t *options = get_options(); int consensus_disabled =
int consensus_disabled = networkstatus_get_param(NULL, "cbtdisabled", ignore_consensus ? 0 : networkstatus_get_param(NULL, "cbtdisabled",
0, 0, 1); 0, 0, 1);
int config_disabled = !options->LearnCircuitBuildTimeout; int config_disabled = !options->LearnCircuitBuildTimeout;
int dirauth_disabled = options->AuthoritativeDir; int dirauth_disabled = options->AuthoritativeDir;

View File

@ -18,6 +18,9 @@ double get_circuit_build_close_time_ms(void);
double get_circuit_build_timeout_ms(void); double get_circuit_build_timeout_ms(void);
int circuit_build_times_disabled(void); int circuit_build_times_disabled(void);
int circuit_build_times_disabled_(const or_options_t *options,
int ignore_consensus);
int circuit_build_times_enough_to_compute(const circuit_build_times_t *cbt); int circuit_build_times_enough_to_compute(const circuit_build_times_t *cbt);
void circuit_build_times_update_state(const circuit_build_times_t *cbt, void circuit_build_times_update_state(const circuit_build_times_t *cbt,
or_state_t *state); or_state_t *state);

View File

@ -3450,7 +3450,7 @@ options_validate(or_options_t *old_options, or_options_t *options,
int severity = LOG_NOTICE; int severity = LOG_NOTICE;
/* Be a little quieter if we've deliberately disabled /* Be a little quieter if we've deliberately disabled
* LearnCircuitBuildTimeout. */ * LearnCircuitBuildTimeout. */
if (circuit_build_times_disabled()) { if (circuit_build_times_disabled_(options, 1)) {
severity = LOG_INFO; severity = LOG_INFO;
} }
log_fn(severity, LD_CONFIG, "You disabled LearnCircuitBuildTimeout, but " log_fn(severity, LD_CONFIG, "You disabled LearnCircuitBuildTimeout, but "