diff options
author | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2016-12-12 14:34:41 +0100 |
---|---|---|
committer | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2016-12-12 15:47:32 +0100 |
commit | 85b42c46184118db2aaa50e44e97966523dd0269 (patch) | |
tree | 17b3f6fb7afea3b319e9fd445cce7e15530bcd2d /tests/logging | |
parent | 9adf32fb60206065026e9c3ef7088ef6bcc013be (diff) |
show bug in logging: erratic redirection to DLGLOBAL for invalid categories
Add a check to logging_test.c to show a bug: when a logging category value that
is out-of-bounds is passed to the logging system, the internal map_subsys()
function should remap that to DLGLOBAL. But in fact DLGLOBAL is -1 and the
function fails to map this to a proper positive array index, directly returning
-1 instead. This results in a negative array index and undefined behavior. A
sanitize build should catch this.
The bug is confirmed by the fact that logging_test.err stays the same
(hopefully) although a logging output should appear from this patch. The test
could as well segfault or anything else, it's a bit of a gamble.
This bug will be fixed along with the expectation in a subsequent patch.
Note: osmo_log_info->num_cat + 0 is also out-of-bounds, but there is a separate
bug there, so leaving this for another patch.
Change-Id: I161b6550fa204a872bad1abefee1a6155393fafd
Diffstat (limited to 'tests/logging')
-rw-r--r-- | tests/logging/logging_test.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/tests/logging/logging_test.c b/tests/logging/logging_test.c index 91b0aaf5..6c5a8f20 100644 --- a/tests/logging/logging_test.c +++ b/tests/logging/logging_test.c @@ -66,6 +66,8 @@ const struct log_info log_info = { .filter_fn = test_filter, }; +extern struct log_info *osmo_log_info; + int main(int argc, char **argv) { struct log_target *stderr_target; @@ -108,5 +110,11 @@ int main(int argc, char **argv) select_output = 1; DEBUGP(DRLL, "You should see this\n"); OSMO_ASSERT(filter_called == 5); /* called twice on output */ + + /* Make sure out-of-bounds category maps to DLGLOBAL */ + log_parse_category_mask(stderr_target, "DLGLOBAL,1"); + DEBUGP(osmo_log_info->num_cat + 1, "You should see this on DLGLOBAL (a)\n"); + DEBUGP(osmo_log_info->num_cat + 100, "You should see this on DLGLOBAL (b)\n"); + return 0; } |