From 870d42ccfea7bb05bc9344118891df7631a08f9b Mon Sep 17 00:00:00 2001 From: Enno Rehling Date: Tue, 3 Nov 2015 23:01:09 +0100 Subject: [PATCH] CID 22442 Unchecked return value from library --- src/bind_storage.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/bind_storage.c b/src/bind_storage.c index dd67d93a8..b531b4c0f 100644 --- a/src/bind_storage.c +++ b/src/bind_storage.c @@ -34,6 +34,7 @@ static int tolua_storage_create(lua_State * L) const char *filename = tolua_tostring(L, 1, 0); const char *type = tolua_tostring(L, 2, "rb"); FILE * F; + int err = 0; F = fopen(filename, type); if (F) { @@ -42,7 +43,7 @@ static int tolua_storage_create(lua_State * L) data->store = store; if (strchr(type, 'r')) { fread(&data->version, sizeof(int), 1, F); - fseek(F, sizeof(int), SEEK_CUR); + err = fseek(F, sizeof(int), SEEK_CUR); } else if (strchr(type, 'w')) { int n = STREAM_VERSION; @@ -50,10 +51,16 @@ static int tolua_storage_create(lua_State * L) fwrite(&data->version, sizeof(int), 1, F); fwrite(&n, sizeof(int), 1, F); } - fstream_init(&data->strm, F); - binstore_init(store, &data->strm); - tolua_pushusertype(L, (void *)data, TOLUA_CAST "storage"); - return 1; + if (err) { + fclose(F); + free(data); + free(store); + } else { + fstream_init(&data->strm, F); + binstore_init(store, &data->strm); + tolua_pushusertype(L, (void *)data, TOLUA_CAST "storage"); + return 1; + } } return 0; }