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)