mirror of https://gerrit.osmocom.org/libosmocore
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
This commit is contained in:
parent
9adf32fb60
commit
85b42c4618
|
@ -66,6 +66,8 @@ const struct log_info log_info = {
|
||||||
.filter_fn = test_filter,
|
.filter_fn = test_filter,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
extern struct log_info *osmo_log_info;
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
struct log_target *stderr_target;
|
struct log_target *stderr_target;
|
||||||
|
@ -108,5 +110,11 @@ int main(int argc, char **argv)
|
||||||
select_output = 1;
|
select_output = 1;
|
||||||
DEBUGP(DRLL, "You should see this\n");
|
DEBUGP(DRLL, "You should see this\n");
|
||||||
OSMO_ASSERT(filter_called == 5); /* called twice on output */
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue