From 7a702de6a3c45fe3ac12b04f298c82f0461863bd Mon Sep 17 00:00:00 2001 From: Rubidium Date: Sun, 25 Feb 2024 15:30:32 +0100 Subject: [PATCH] Codefix #12162, 3105d0b: Textbuf::Assign read beyond std::string_view --- src/textbuf.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/textbuf.cpp b/src/textbuf.cpp index 2cffc81aeb..60b839e326 100644 --- a/src/textbuf.cpp +++ b/src/textbuf.cpp @@ -413,9 +413,11 @@ void Textbuf::Assign(StringID string) */ void Textbuf::Assign(const std::string_view text) { - const char *last_of = &this->buf[this->max_bytes - 1]; - strecpy(this->buf, text.data(), last_of); - StrMakeValidInPlace(this->buf, last_of, SVS_NONE); + size_t bytes = std::min(this->max_bytes - 1, text.size()); + memcpy(this->buf, text.data(), bytes); + this->buf[bytes] = '\0'; + + StrMakeValidInPlace(this->buf, &this->buf[bytes], SVS_NONE); /* Make sure the name isn't too long for the text buffer in the number of * characters (not bytes). max_chars also counts the '\0' characters. */