From 2ba9d8ebaaafe7dbac754f6f7e066c7db6411a4b Mon Sep 17 00:00:00 2001 From: Rye Mutt <rye@alchemyviewer.org> Date: Tue, 17 Mar 2020 03:24:53 -0400 Subject: [PATCH] Prevent invalid malloc and file handle leak in LLPreviewScript --- indra/newview/llpreviewscript.cpp | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp index f499f14846e..102e9393745 100644 --- a/indra/newview/llpreviewscript.cpp +++ b/indra/newview/llpreviewscript.cpp @@ -599,18 +599,25 @@ bool LLScriptEdCore::loadScriptText(const std::string& filename) fseek(file, 0L, SEEK_END); size_t file_length = (size_t) ftell(file); fseek(file, 0L, SEEK_SET); - char* buffer = new char[file_length+1]; - size_t nread = fread(buffer, 1, file_length, file); - if (nread < file_length) - { - LL_WARNS() << "Short read" << LL_ENDL; - } - buffer[nread] = '\0'; - fclose(file); - - mEditor->setText(LLStringExplicit(buffer)); - delete[] buffer; - + if (file_length > 0) + { + auto buffer = std::make_unique<char[]>(file_length + 1); + size_t nread = fread(buffer.get(), 1, file_length, file); + if (nread < file_length) + { + LL_WARNS() << "Short read" << LL_ENDL; + } + buffer[nread] = '\0'; + fclose(file); + + mEditor->setText(LLStringExplicit(buffer.get())); + } + else + { + LL_WARNS() << "Error getting file size " << filename << LL_ENDL; + fclose(file); + return false; + } return true; } -- GitLab