Core: Improve handling failures in mCoreSaveStateNamed function (#1272) * Core: Do not set time in save state if we could not get the time Signed-off-by: Francois Berder <fberder@outlook.fr> * Core: Fix memory leak if gettimeofday or timespec_get failed Signed-off-by: Francois Berder <fberder@outlook.fr> * Core: Protect against malloc failure in mCoreSaveStateNamed Signed-off-by: Francois Berder <fberder@outlook.fr>
François Berder fberder@outlook.fr
Sat, 19 Jan 2019 08:28:40 +0000
1 files changed,
25 insertions(+),
20 deletions(-)
jump to
M
src/core/serialize.c
→
src/core/serialize.c
@@ -306,31 +306,36 @@ size_t stateSize = core->stateSize(core);
if (flags & SAVESTATE_METADATA) { uint64_t* creationUsec = malloc(sizeof(*creationUsec)); + if (creationUsec) { #ifndef _MSC_VER - struct timeval tv; - if (!gettimeofday(&tv, 0)) { - uint64_t usec = tv.tv_usec; - usec += tv.tv_sec * 1000000LL; - STORE_64LE(usec, 0, creationUsec); - } + struct timeval tv; + if (!gettimeofday(&tv, 0)) { + uint64_t usec = tv.tv_usec; + usec += tv.tv_sec * 1000000LL; + STORE_64LE(usec, 0, creationUsec); + } #else - struct timespec ts; - if (timespec_get(&ts, TIME_UTC)) { - uint64_t usec = ts.tv_nsec / 1000; - usec += ts.tv_sec * 1000000LL; - STORE_64LE(usec, 0, creationUsec); - } + struct timespec ts; + if (timespec_get(&ts, TIME_UTC)) { + uint64_t usec = ts.tv_nsec / 1000; + usec += ts.tv_sec * 1000000LL; + STORE_64LE(usec, 0, creationUsec); + } #endif - else { - creationUsec = 0; + else { + free(creationUsec); + creationUsec = 0; + } } - struct mStateExtdataItem item = { - .size = sizeof(*creationUsec), - .data = creationUsec, - .clean = free - }; - mStateExtdataPut(&extdata, EXTDATA_META_TIME, &item); + if (creationUsec) { + struct mStateExtdataItem item = { + .size = sizeof(*creationUsec), + .data = creationUsec, + .clean = free + }; + mStateExtdataPut(&extdata, EXTDATA_META_TIME, &item); + } } if (flags & SAVESTATE_SAVEDATA) {