From 884b52a3b29661a10e183daf4cea7a37698f404b Mon Sep 17 00:00:00 2001 From: Hisham Muhammad Date: Mon, 27 Nov 2017 14:03:38 -0200 Subject: Fix memory leak in case of realloc failure. (#102) Fixes #101. --- src/lfs.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/lfs.c b/src/lfs.c index c8122c2..f510ab5 100644 --- a/src/lfs.c +++ b/src/lfs.c @@ -186,9 +186,12 @@ static int get_dir (lua_State *L) { size_t size = LFS_MAXPATHLEN; /* initial buffer size */ int result; while (1) { - path = realloc(path, size); - if (!path) /* failed to allocate */ - return pusherror(L, "get_dir realloc() failed"); + char* path2 = realloc(path, size); + if (!path2) /* failed to allocate */ { + result = pusherror(L, "get_dir realloc() failed"); + break; + } + path = path2; if (getcwd(path, size) != NULL) { /* success, push the path to the Lua stack */ lua_pushstring(L, path); @@ -860,9 +863,12 @@ static int push_link_target(lua_State *L) { char *target = NULL; int tsize, size = 256; /* size = initial buffer capacity */ while (1) { - target = realloc(target, size); - if (!target) /* failed to allocate */ + char* target2 = realloc(target, size); + if (!target2) { /* failed to allocate */ + free(target); return 0; + } + target = target2; tsize = readlink(file, target, size); if (tsize < 0) { /* a readlink() error occurred */ free(target); -- cgit v1.2.3