Skip to content
Snippets Groups Projects
Commit dd119b27 authored by George Kadianakis's avatar George Kadianakis
Browse files

Merge remote-tracking branch 'tor-gitlab/mr/185' into master

parents 4f5a1166 51182252
No related branches found
No related tags found
1 merge request!185Ticket32178 redux: Remove spaces at and of control log events
o Minor bugfixes (logging):
- Remove trailing whitespaces from control event log messages. Fixes bug
32178; bugfix on 0.1.1.1-alpha. Based on a patch by Amadeusz Pawlik.
......@@ -1352,6 +1352,27 @@ enable_control_logging(void)
tor_assert(0);
}
/** Remove newline and carriage-return characters from @a msg, replacing them
* with spaces, and discarding any that appear at the end of the message */
void
control_logmsg_strip_newlines(char *msg)
{
char *cp;
for (cp = msg; *cp; ++cp) {
if (*cp == '\r' || *cp == '\n') {
*cp = ' ';
}
}
if (cp == msg)
return;
/* Remove trailing spaces */
for (--cp; *cp == ' '; --cp) {
*cp = '\0';
if (cp == msg)
break;
}
}
/** We got a log message: tell any interested control connections. */
void
control_event_logmsg(int severity, log_domain_mask_t domain, const char *msg)
......@@ -1380,11 +1401,8 @@ control_event_logmsg(int severity, log_domain_mask_t domain, const char *msg)
char *b = NULL;
const char *s;
if (strchr(msg, '\n')) {
char *cp;
b = tor_strdup(msg);
for (cp = b; *cp; ++cp)
if (*cp == '\r' || *cp == '\n')
*cp = ' ';
control_logmsg_strip_newlines(b);
}
switch (severity) {
case LOG_DEBUG: s = "DEBUG"; break;
......
......@@ -341,6 +341,8 @@ struct control_event_t {
extern const struct control_event_t control_event_table[];
void control_logmsg_strip_newlines(char *msg);
#ifdef TOR_UNIT_TESTS
MOCK_DECL(STATIC void,
send_control_event_string,(uint16_t event, const char *msg));
......
......@@ -436,6 +436,33 @@ test_cntev_signal(void *arg)
UNMOCK(queue_control_event_string);
}
static void
test_cntev_log_fmt(void *arg)
{
(void) arg;
char *result = NULL;
#define CHECK(pre, post) \
do { \
result = tor_strdup((pre)); \
control_logmsg_strip_newlines(result); \
tt_str_op(result, OP_EQ, (post)); \
tor_free(result); \
} while (0)
CHECK("There is a ", "There is a");
CHECK("hello", "hello");
CHECK("", "");
CHECK("Put spaces at the end ", "Put spaces at the end");
CHECK(" ", "");
CHECK("\n\n\n", "");
CHECK("Testing\r\n", "Testing");
CHECK("T e s t\ni n g\n", "T e s t i n g");
done:
tor_free(result);
#undef CHECK
}
static void
setup_orconn_state(orconn_state_msg_t *msg, uint64_t gid, uint64_t chan,
int proxy_type)
......@@ -718,6 +745,7 @@ struct testcase_t controller_event_tests[] = {
TEST(event_mask, TT_FORK),
TEST(format_stream, TT_FORK),
TEST(signal, TT_FORK),
TEST(log_fmt, 0),
T_PUBSUB(dirboot_defer_desc, TT_FORK),
T_PUBSUB(dirboot_defer_orconn, TT_FORK),
T_PUBSUB(orconn_state, TT_FORK),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment