From f20a35e0de416ca7ae1f3771f3adc0523699cbb8 Mon Sep 17 00:00:00 2001 From: Matt Mascarenhas Date: Sun, 10 May 2020 16:56:37 +0100 Subject: [PATCH] cinera.c: Fix buffer sizing crash bug --- cinera/cinera.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/cinera/cinera.c b/cinera/cinera.c index 8211450..82aa0ed 100644 --- a/cinera/cinera.c +++ b/cinera/cinera.c @@ -17,7 +17,7 @@ typedef struct version CINERA_APP_VERSION = { .Major = 0, .Minor = 7, - .Patch = 2 + .Patch = 3 }; #include // NOTE(matt): varargs @@ -12113,12 +12113,13 @@ CloseNodeNewLine(buffer *B, uint32_t *IndentationLevel, html_element_id Element) AppendStringToBuffer(B, Wrap0(">")); } + string -StripFromStringStart(string From, string Strip) +TrimString(string S, uint32_t CharsFromStart, uint32_t CharsFromEnd) { - string Result = From; - Result.Base += Strip.Length; - Result.Length -= Strip.Length; + string Result = S; + Result.Length -= (CharsFromStart + CharsFromEnd); + Result.Base += CharsFromStart; return Result; } @@ -12203,11 +12204,11 @@ GenerateIndexOfProjectAndChildren(buffer *Index, db_header_project *StoredP, pro if(*StoredP->Unit) { // TODO(matt): That rigorous notion of numbering, goddammit?! - char Number[16] = {}; - string NumberL = StripFromStringStart(Wrap0i(Entry->HMMLBaseFilename, sizeof(Entry->HMMLBaseFilename)), - P->ID); + string NumberL = TrimString(Wrap0i(Entry->HMMLBaseFilename, sizeof(Entry->HMMLBaseFilename)), + P->ID.Length, 0); + char Number[NumberL.Length + 1]; + ClearCopyStringNoFormat(Number, sizeof(Number), NumberL); - CopyStringNoFormat(Number, sizeof(Number), NumberL); if(CurrentProject->NumberingScheme == NS_LINEAR) { for(int i = 0; Number[i]; ++i)