diff options
author | Bryce W. Harrington <b.harrington@samsung.com> | 2014-04-21 23:51:02 +0000 |
---|---|---|
committer | Kristian Høgsberg <krh@bitplanet.net> | 2014-04-25 13:19:51 -0700 |
commit | bfd74f40f3804a42a9135b3aef01f626372153ab (patch) | |
tree | 28e357c6ba279f66ccf8f6c460de0b2fe8018625 /src/screenshooter.c | |
parent | 4c3661fd7bd6a9970a9cc6b7f9573b8617401bd8 (diff) | |
download | weston-bfd74f40f3804a42a9135b3aef01f626372153ab.tar.gz |
Check zalloc return for out of memory situation
Most zalloc calls in weston are checked, this fixes a handful that were
being ignored. As found by `grep -EIsr "[^x]zalloc\(" . -A1`
Signed-off-by: Bryce Harrington <b.harrington@samsung.com>
Diffstat (limited to 'src/screenshooter.c')
-rw-r--r-- | src/screenshooter.c | 33 |
1 files changed, 20 insertions, 13 deletions
diff --git a/src/screenshooter.c b/src/screenshooter.c index 02146c89..369e9204 100644 --- a/src/screenshooter.c +++ b/src/screenshooter.c @@ -450,6 +450,17 @@ weston_recorder_frame_notify(struct wl_listener *listener, void *data) } static void +weston_recorder_free(struct weston_recorder *recorder) +{ + if (recorder == NULL) + return; + free(recorder->rect); + free(recorder->tmpbuf); + free(recorder->frame); + free(recorder); +} + +static void weston_recorder_create(struct weston_output *output, const char *filename) { struct weston_compositor *compositor = output->compositor; @@ -461,7 +472,6 @@ weston_recorder_create(struct weston_output *output, const char *filename) do_yflip = !!(compositor->capabilities & WESTON_CAP_CAPTURE_YFLIP); recorder = malloc(sizeof *recorder); - if (recorder == NULL) { weston_log("%s: out of memory\n", __func__); return; @@ -476,6 +486,12 @@ weston_recorder_create(struct weston_output *output, const char *filename) recorder->destroying = 0; recorder->output = output; + if ((recorder->frame == NULL) || (recorder->rect == NULL)) { + weston_log("%s: out of memory\n", __func__); + weston_recorder_free(recorder); + return; + } + if (do_yflip) recorder->tmpbuf = NULL; else @@ -493,10 +509,7 @@ weston_recorder_create(struct weston_output *output, const char *filename) break; default: weston_log("unknown recorder format\n"); - free(recorder->rect); - free(recorder->tmpbuf); - free(recorder->frame); - free(recorder); + weston_recorder_free(recorder); return; } @@ -505,10 +518,7 @@ weston_recorder_create(struct weston_output *output, const char *filename) if (recorder->fd < 0) { weston_log("problem opening output file %s: %m\n", filename); - free(recorder->rect); - free(recorder->tmpbuf); - free(recorder->frame); - free(recorder); + weston_recorder_free(recorder); return; } @@ -527,11 +537,8 @@ weston_recorder_destroy(struct weston_recorder *recorder) { wl_list_remove(&recorder->frame_listener.link); close(recorder->fd); - free(recorder->tmpbuf); - free(recorder->frame); - free(recorder->rect); recorder->output->disable_planes--; - free(recorder); + weston_recorder_free(recorder); } static void |