Plug two minor Leaks (#5603)
authorAuke Kok <sofar+github@foo-projects.org>
Mon, 17 Apr 2017 07:04:58 +0000 (00:04 -0700)
committerLoïc Blot <nerzhul@users.noreply.github.com>
Mon, 17 Apr 2017 07:04:58 +0000 (09:04 +0200)
* Resource leak: CHECK_FILE_ERR returns, without freeing chunk_name.

Found with static analysis.

* Resource leak: leaks `page` on error path.

Found with static analysis.

src/cguittfont/CGUITTFont.cpp
src/script/cpp_api/s_security.cpp

index c2d37c6c0dda0b3f61666d65810f52326e1bdfab..bd4e700dec7bbbd3b75698499f0669278d825532 100644 (file)
@@ -512,9 +512,11 @@ CGUITTGlyphPage* CGUITTFont::createGlyphPage(const u8& pixel_mode)
        if (page_texture_size.Width > max_texture_size.Width || page_texture_size.Height > max_texture_size.Height)
                page_texture_size = max_texture_size;
 
-       if (!page->createPageTexture(pixel_mode, page_texture_size))
+       if (!page->createPageTexture(pixel_mode, page_texture_size)) {
                // TODO: add error message?
+               delete page;
                return 0;
+       }
 
        if (page)
        {
index ec3a52e8e8afdbad67da1f82f6bb1fa3305d1600..5ad7947d5f6791bce4d8475a2887fd693623a765 100644 (file)
@@ -406,7 +406,14 @@ bool ScriptApiSecurity::safeLoadFile(lua_State *L, const char *path)
 
        // Read the file
        int ret = std::fseek(fp, 0, SEEK_END);
-       CHECK_FILE_ERR(ret, fp);
+       if (ret) {
+               lua_pushfstring(L, "%s: %s", path, strerror(errno));
+               std::fclose(fp);
+               if (path) {
+                       delete [] chunk_name;
+               }
+               return false;
+       }
 
        size_t size = std::ftell(fp) - start;
        char *code = new char[size];