Skip to content

输出长日志崩溃 #730

Open
Open
@wanglxchina

Description

@wanglxchina

vsnprintf用法貌似不对

#include <stdio.h>
#include <stdarg.h>

int vsnprintf(char *str, size_t size, const char *format, va_list ap);
  1. 如果输出的字符串长度小于 size,返回实际写入的字符数(不包括字符串结束符 '\0')。
  2. 如果输出的字符串长度大于等于 size,返回如果有足够空间时本应写入的字符数(不包括字符串结束符 '\0')。这意味着返回值可能会大于 size - 1。

hlog.c下面这段代码没有考虑第二种长度超出size的情况,造成len+=..后len值错误

case 's':
{
    va_list ap;
    va_start(ap, fmt);
    len += vsnprintf(buf + len, bufsize - len, fmt, ap);
    va_end(ap);
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions