finsh模块源代码疑似bug反馈

发布于 2021-04-07 15:23:20

finsh模块源代码,反馈2处bug,源文件位置finsh_token.c:

  1. token_proc_string函数,line377,eof判断时返回NULL,多余了一个;
static uint8_t* token_proc_string(struct finsh_token* self)
{
    uint8_t* p;

    for ( p = &self->string[0]; p - &(self->string[0]) < FINSH_STRING_MAX; )
    {
        char ch = token_next_char(self);

        if ( is_eof(self) )
        {
            finsh_error_set(FINSH_ERROR_UNEXPECT_END);
            return NULL;;
        }
  1. token_proc_number函数,line477,16进制处理时,判断条件应该为is_xdigit(ch)吧?
static void token_proc_number(struct finsh_token* 
{
    char ch;
    char *p, buf[128];
    long value;

    value = 0;
    p = buf;

    ch  = token_next_char(self);
    if ( ch == '0' )
    {
        int b;
        ch = token_next_char(self);
        if ( ch == 'x' || ch == 'X' )/*it's a hex number*/
        {
            b = 16;
            ch = token_next_char(self);
            while ( is_digit(ch) || is_alpha(ch) )
            {
                *p++ = ch;
                ch = token_next_char(self);
            }

            *p = '\0';
        }

查看更多

关注者
0
被浏览
138
3 个回答
mii
mii 2021-04-07
  1. return Null;;多了一个,这个可以去提交PR。
  2. 源码采用组合is_digit(ch) || is_alpha(ch)判断,效果是一致的。
flashman2002
flashman2002 2021-04-07

应该提交PR,不应该再这里发表呀。

cxhxy12345
cxhxy12345 2021-04-07

你这里的token_next_char函数好像用错了,它的作用不是提取字串中的下一个字符。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览