• htick filelist

    From Alex Barinov@2:5020/715 to All on Thu Sep 3 12:47:19 2026
    Hello everybody!

    Починил при помощи ИИ-шечки падение сабжа. Если ок, прошу сопричастных внести в git.

    huskylib:

    diff --git a/src/adcase.c b/src/adcase.c
    index d55934b..9add941 100644
    --- a/src/adcase.c
    +++ b/src/adcase.c
    @@ -153,8 +153,8 @@ void adaptcase_refresh_dir(const char * directory)
    {
    if(adaptcase_cache[l].query != NULL)
    {
    - if((!memcmp(adaptcase_cache[l].query, directory,
    - k)) && (adaptcase_cache[l].query[k] == '\0'))
    + if(strlen(adaptcase_cache[l].query) == (size_t)k &&
    + memcmp(adaptcase_cache[l].query, directory, (size_t)k) == 0)
    {
    nfree(adaptcase_cache[l].query);
    nfree(adaptcase_cache[l].result);
    @@ -222,8 +222,8 @@ start_over:
    {
    if(adaptcase_cache[l].query != NULL)
    {
    - if((!memcmp(adaptcase_cache[l].query, pathname,
    - k)) && (adaptcase_cache[l].query[k] == '\0'))
    + if(strlen(adaptcase_cache[l].query) == (size_t)k &&
    + memcmp(adaptcase_cache[l].query, pathname, (size_t)k) == 0)
    {
    /* cache hit for the directory */
    #ifdef TRACECACHE
    @@ -466,6 +466,17 @@ add_to_cache:
    fprintf(ftrc, "Error in building cache entry.\n");
    #endif
    addresult = 0;
    +
    + /*
    + * cache_failure increments i because normally it points at '/'.
    + * At end of pathname it points at '\0', so incrementing it would
    + * make the next pathname[i] access out of bounds.
    + */
    + if(pathname[i] == '\0')
    + {
    + break;
    + }
    +
    goto cache_failure;
    }


    htick:

    diff --git a/src/add_desc.c b/src/add_desc.c
    index a20c6d1..6fbabf2 100644
    --- a/src/add_desc.c
    +++ b/src/add_desc.c
    @@ -420,21 +420,24 @@ int GetDescFormBbsFile(char * descr_file_name, char * file_name, s_ticfile * tic
    }
    }

    - if(config->addDLC && config->DLCDigits > 0 && config->DLCDigits < 10 &&
    - token[0] == '[')
    - {
    - while(']' != *p)
    - {
    - p++;
    - }
    - p++;

    - while(p && !isspace(*p))
    - {
    - p++;
    - }
    - token = p;
    - }
    + if(config->addDLC && config->DLCDigits > 0 &&
    + config->DLCDigits < 10 && token[0] == '[')
    + {
    + char * end = strchr(token, ']');
    +
    + if(end != NULL)
    + {
    + token = end + 1;
    +
    + while(*token != '\0' &&
    + isspace((unsigned char)*token))
    + {
    + token++;
    + }
    + }
    + }
    +

    for(i = 0; i < tic->anzdesc; i++)
    {
    diff --git a/src/filelist.c b/src/filelist.c
    index a634d4f..d777188 100644
    --- a/src/filelist.c
    +++ b/src/filelist.c
    @@ -195,19 +195,27 @@ int ParseBBSFile(const char * fbbsname)
    }
    }

    - if(config->addDLC && config->DLCDigits > 0 && config->DLCDigits < 10 && token[0] == '[')
    + if(config->addDLC && config->DLCDigits > 0 &&
    + config->DLCDigits < 10 && token[0] == '[')
    {
    - while(']' != *p)
    + p = token;
    +
    + while(*p != '\0' && *p != ']')
    {
    p++;
    }
    - p++;

    - while(p && !isspace(*p))
    + if(*p == ']')
    {
    p++;
    +
    + while(*p != '\0' && isspace((unsigned char)*p))
    + {
    + p++;
    + }
    +
    + token = p;
    }
    - token = p;
    }

    fdesc->anzdesc = 0;




    Alex

    --- GoldED+/LNX 1.1.5-b20260830
    * Origin: Мой адрес не дом и не улица мой адрес (2:5020/715)