mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
Merge branch 'maint-0.3.5' into release-0.3.5
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
o Minor bugfixes (tests):
|
||||
- Detect and suppress "bug" warnings from the util/time test on Windows.
|
||||
Fixes bug 29161; bugfix on 0.2.9.3-alpha.
|
||||
@@ -0,0 +1,3 @@
|
||||
o Minor features (testing):
|
||||
- Treat all unexpected ERR and BUG messages as test failures.
|
||||
Closes ticket 28668.
|
||||
@@ -0,0 +1,4 @@
|
||||
o Minor bugfixes (tests):
|
||||
- Do not log an error-level message if we fail to find an IPv6
|
||||
network interface from the unit tests. Fixes bug 29160; bugfix on
|
||||
0.2.7.3-rc.
|
||||
@@ -39,6 +39,8 @@
|
||||
*
|
||||
* Convert *<b>timep</b> to a struct tm in local time, and store the value in
|
||||
* *<b>result</b>. Return the result on success, or NULL on failure.
|
||||
*
|
||||
* Treat malformatted inputs localtime outputs as a BUG.
|
||||
*/
|
||||
struct tm *
|
||||
tor_localtime_r(const time_t *timep, struct tm *result)
|
||||
@@ -56,6 +58,8 @@ tor_localtime_r(const time_t *timep, struct tm *result)
|
||||
*
|
||||
* Convert *<b>timep</b> to a struct tm in UTC, and store the value in
|
||||
* *<b>result</b>. Return the result on success, or NULL on failure.
|
||||
*
|
||||
* Treat malformatted inputs or gmtime outputs as a BUG.
|
||||
*/
|
||||
struct tm *
|
||||
tor_gmtime_r(const time_t *timep, struct tm *result)
|
||||
|
||||
@@ -1013,7 +1013,7 @@ test_address_get_if_addrs6(void *arg)
|
||||
|
||||
(void)arg;
|
||||
|
||||
rv = get_interface_address6(LOG_ERR, AF_INET6, &tor_addr);
|
||||
rv = get_interface_address6(LOG_WARN, AF_INET6, &tor_addr);
|
||||
|
||||
/* Work even on systems without IPv6 interfaces */
|
||||
if (rv == 0) {
|
||||
@@ -1204,4 +1204,3 @@ struct testcase_t address_tests[] = {
|
||||
ADDRESS_TEST(tor_addr_in_same_network_family, 0),
|
||||
END_OF_TESTCASES
|
||||
};
|
||||
|
||||
|
||||
@@ -690,6 +690,12 @@ test_util_time(void *arg)
|
||||
expect_single_log_msg_containing(msg); \
|
||||
teardown_capture_of_logs(); \
|
||||
} while (0)
|
||||
#define CHECK_POSSIBLE_EINVAL() do { \
|
||||
if (mock_saved_log_n_entries()) { \
|
||||
expect_single_log_msg_containing("Invalid argument"); \
|
||||
} \
|
||||
teardown_capture_of_logs(); \
|
||||
} while (0)
|
||||
|
||||
#define CHECK_TIMEGM_ARG_OUT_OF_RANGE(msg) \
|
||||
CHECK_TIMEGM_WARNING("Out-of-range argument to tor_timegm")
|
||||
@@ -885,12 +891,16 @@ test_util_time(void *arg)
|
||||
|
||||
if (sizeof(time_t) == 4 || sizeof(time_t) == 8) {
|
||||
t_res = -1*(1 << 30);
|
||||
CAPTURE();
|
||||
tor_gmtime_r(&t_res, &b_time);
|
||||
CHECK_POSSIBLE_EINVAL();
|
||||
tt_assert(b_time.tm_year == (1970-1900) ||
|
||||
b_time.tm_year == (1935-1900));
|
||||
|
||||
t_res = INT32_MIN;
|
||||
CAPTURE();
|
||||
tor_gmtime_r(&t_res, &b_time);
|
||||
CHECK_POSSIBLE_EINVAL();
|
||||
tt_assert(b_time.tm_year == (1970-1900) ||
|
||||
b_time.tm_year == (1901-1900));
|
||||
}
|
||||
@@ -900,7 +910,9 @@ test_util_time(void *arg)
|
||||
/* one of the smallest tm_year values my 64 bit system supports:
|
||||
* b_time.tm_year == (-292275055LL-1900LL) without clamping */
|
||||
t_res = -9223372036854775LL;
|
||||
CAPTURE();
|
||||
tor_gmtime_r(&t_res, &b_time);
|
||||
CHECK_POSSIBLE_EINVAL();
|
||||
tt_assert(b_time.tm_year == (1970-1900) ||
|
||||
b_time.tm_year == (1-1900));
|
||||
|
||||
@@ -926,7 +938,9 @@ test_util_time(void *arg)
|
||||
{
|
||||
/* As above, but with localtime. */
|
||||
t_res = -9223372036854775LL;
|
||||
CAPTURE();
|
||||
tor_localtime_r(&t_res, &b_time);
|
||||
CHECK_POSSIBLE_EINVAL();
|
||||
tt_assert(b_time.tm_year == (1970-1900) ||
|
||||
b_time.tm_year == (1-1900));
|
||||
|
||||
@@ -983,7 +997,9 @@ test_util_time(void *arg)
|
||||
/* one of the largest tm_year values my 64 bit system supports:
|
||||
* b_time.tm_year == (292278994L-1900L) without clamping */
|
||||
t_res = 9223372036854775LL;
|
||||
CAPTURE();
|
||||
tor_gmtime_r(&t_res, &b_time);
|
||||
CHECK_POSSIBLE_EINVAL();
|
||||
tt_assert(b_time.tm_year == (2037-1900) ||
|
||||
b_time.tm_year == (9999-1900));
|
||||
|
||||
@@ -1004,7 +1020,9 @@ test_util_time(void *arg)
|
||||
{
|
||||
/* As above but with localtime. */
|
||||
t_res = 9223372036854775LL;
|
||||
CAPTURE();
|
||||
tor_localtime_r(&t_res, &b_time);
|
||||
CHECK_POSSIBLE_EINVAL();
|
||||
tt_assert(b_time.tm_year == (2037-1900) ||
|
||||
b_time.tm_year == (9999-1900));
|
||||
|
||||
@@ -1047,7 +1065,10 @@ test_util_time(void *arg)
|
||||
|
||||
/* This value is out of range with 32 bit time_t, but in range for 64 bit
|
||||
* time_t */
|
||||
CAPTURE();
|
||||
format_rfc1123_time(timestr, (time_t)2150000000UL);
|
||||
CHECK_POSSIBLE_EINVAL();
|
||||
|
||||
#if SIZEOF_TIME_T == 4
|
||||
#if 0
|
||||
/* Wrapping around will have made it this. */
|
||||
@@ -1216,7 +1237,9 @@ test_util_time(void *arg)
|
||||
/* This value is out of range with 32 bit time_t, but in range for 64 bit
|
||||
* time_t */
|
||||
tv.tv_sec = (time_t)2150000000UL;
|
||||
CAPTURE();
|
||||
format_iso_time(timestr, (time_t)tv.tv_sec);
|
||||
CHECK_POSSIBLE_EINVAL();
|
||||
#if SIZEOF_TIME_T == 4
|
||||
/* format_iso_time should indicate failure on overflow, but it doesn't yet.
|
||||
* Hopefully #18480 will improve the failure semantics in this case.
|
||||
@@ -1231,6 +1254,7 @@ test_util_time(void *arg)
|
||||
|
||||
#undef CAPTURE
|
||||
#undef CHECK_TIMEGM_ARG_OUT_OF_RANGE
|
||||
#undef CHECK_POSSIBLE_EINVAL
|
||||
|
||||
done:
|
||||
teardown_capture_of_logs();
|
||||
|
||||
@@ -239,6 +239,15 @@ tinytest_postfork(void)
|
||||
init_pregenerated_keys();
|
||||
}
|
||||
|
||||
static void
|
||||
log_callback_failure(int severity, uint32_t domain, const char *msg)
|
||||
{
|
||||
(void)msg;
|
||||
if (severity == LOG_ERR || (domain & LD_BUG)) {
|
||||
tinytest_set_test_failed_();
|
||||
}
|
||||
}
|
||||
|
||||
/** Main entry point for unit test code: parse the command line, and run
|
||||
* some unit tests. */
|
||||
int
|
||||
@@ -287,6 +296,7 @@ main(int c, const char **v)
|
||||
c = i_out;
|
||||
|
||||
{
|
||||
/* setup logs to stdout */
|
||||
log_severity_list_t s;
|
||||
memset(&s, 0, sizeof(s));
|
||||
set_log_severity_config(loglevel, LOG_ERR, &s);
|
||||
@@ -294,6 +304,14 @@ main(int c, const char **v)
|
||||
s.masks[LOG_WARN-LOG_ERR] |= LD_BUG;
|
||||
add_stream_log(&s, "", fileno(stdout));
|
||||
}
|
||||
{
|
||||
/* Setup logs that cause failure. */
|
||||
log_severity_list_t s;
|
||||
memset(&s, 0, sizeof(s));
|
||||
set_log_severity_config(LOG_ERR, LOG_ERR, &s);
|
||||
s.masks[LOG_WARN-LOG_ERR] |= LD_BUG;
|
||||
add_callback_log(&s, log_callback_failure);
|
||||
}
|
||||
init_protocol_warning_severity_level();
|
||||
|
||||
options->command = CMD_RUN_UNITTESTS;
|
||||
|
||||
Reference in New Issue
Block a user