mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-10-30 09:33:39 +01:00
FFstrbuf: fix bug of AppendF when string len == ffStrbufGetFree
This commit is contained in:
+7
-10
@@ -138,21 +138,18 @@ void ffStrbufAppendVF(FFstrbuf* strbuf, const char* format, va_list arguments)
|
||||
va_copy(copy, arguments);
|
||||
|
||||
uint32_t free = ffStrbufGetFree(strbuf);
|
||||
uint32_t written = (uint32_t) vsnprintf(strbuf->chars + strbuf->length, free, format, arguments);
|
||||
int written = vsnprintf(strbuf->chars + strbuf->length, strbuf->allocated > 0 ? free + 1 : 0, format, arguments);
|
||||
|
||||
if(strbuf->length + written > free)
|
||||
if(written > 0 && strbuf->length + (uint32_t) written > free)
|
||||
{
|
||||
ffStrbufEnsureFree(strbuf, written);
|
||||
written = (uint32_t) vsnprintf(strbuf->chars + strbuf->length, ffStrbufGetFree(strbuf), format, copy);
|
||||
ffStrbufEnsureFree(strbuf, (uint32_t) written);
|
||||
written = vsnprintf(strbuf->chars + strbuf->length, (uint32_t) written + 1, format, copy);
|
||||
}
|
||||
|
||||
va_end(copy);
|
||||
|
||||
if(written == 0)
|
||||
return;
|
||||
|
||||
strbuf->length += written;
|
||||
strbuf->chars[strbuf->length] = '\0';
|
||||
if(written > 0)
|
||||
strbuf->length += (uint32_t) written;
|
||||
}
|
||||
|
||||
void ffStrbufAppendSUntilC(FFstrbuf* strbuf, const char* value, char until)
|
||||
@@ -438,5 +435,5 @@ void ffStrbufDestroy(FFstrbuf* strbuf)
|
||||
//Avoid free-after-use. These 3 assignments are cheap so don't remove them
|
||||
strbuf->allocated = strbuf->length = 0;
|
||||
free(strbuf->chars);
|
||||
strbuf->chars = NULL;
|
||||
strbuf->chars = CHAR_NULL_PTR;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user