Skip to content

ulog组件空指针与空字符混用的bug #5323

@lixiaolong1997

Description

@lixiaolong1997

rt-thread分支:master

1、ulog_output_to_all_backend函数中若后端不支持颜色或者不是raw,会进入else分支,else中使用使用rt_strlen计算各个输出等级颜色字符串的长度。作者想当然认为color_output_info中存储的是非空字符串,然而color_output_info中是字符串指针,有可能是NULL空指针,而非空字符串,这里误用空指针和空字符串,势必错误。
if (backend->support_color || is_raw)
{
backend->output(backend, level, tag, is_raw, log, size);
}
else
{
/* recalculate the log start address and log size when backend not supported color */
rt_size_t color_info_len = rt_strlen(color_output_info[level]), output_size = size;
if (color_info_len)
{
rt_size_t color_hdr_len = rt_strlen(CSI_START) + color_info_len;

            log += color_hdr_len;
            output_size -= (color_hdr_len + (sizeof(CSI_END) - 1));
        }
        backend->output(backend, level, tag, is_raw, log, output_size);
    }

2、ulog_formater中用到color_output_info时,又认为存储的对象是指针.....,向后不一致。

#ifdef ULOG_USING_COLOR
/* add CSI start sign and color info /
if (color_output_info[level])
{
log_len += ulog_strcpy(log_len, log_buf + log_len, CSI_START);
log_len += ulog_strcpy(log_len, log_buf + log_len, color_output_info[level]);
}
#endif /
ULOG_USING_COLOR /
3、
#ifdef ULOG_USING_COLOR
/
color output info /
static const char * const color_output_info[] =
{
ULOG_COLOR_ASSERT,
NULL,
NULL,
ULOG_COLOR_ERROR,
ULOG_COLOR_WARN,
NULL,
ULOG_COLOR_INFO,
ULOG_COLOR_DEBUG,
};
#endif /
ULOG_USING_COLOR */
4、空指针、空字符串傻傻分不清,还写系统,只能哈哈了。
5、修复很简单,自己搞定。

Metadata

Metadata

Assignees

No one assigned

    Labels

    discussionThis PR/issue needs to be discussed later

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions