* strcache.c (add_string): [SV 47071] Handle huge initial string.

If the very first string added to the string cache is more than
half the maximum size, we failed when moving the only strcache
buffer to the full list.
This commit is contained in:
Paul Smith 2016-02-28 21:32:18 -05:00
parent 89e18c12eb
commit 8530d77c68

View File

@ -110,13 +110,13 @@ add_string (const char *str, unsigned int len)
for (; *spp != NULL; spp = &(*spp)->next)
if ((*spp)->bytesfree > sz)
break;
sp = *spp;
/* If nothing is big enough, make a new cache at the front. */
sp = *spp;
if (sp == NULL)
{
sp = new_cache (&strcache, BUFSIZE);
spp = &sp;
spp = &strcache;
}
/* Add the string to this cache. */
@ -124,9 +124,9 @@ add_string (const char *str, unsigned int len)
/* If the amount free in this cache is less than the average string size,
consider it full and move it to the full list. */
if (sp->bytesfree < (total_size / total_strings) + 1)
if (total_strings > 20 && sp->bytesfree < (total_size / total_strings) + 1)
{
*spp = (*spp)->next;
*spp = sp->next;
sp->next = fullcache;
fullcache = sp;
}