summaryrefslogtreecommitdiff
path: root/src/screenshooter.c
diff options
context:
space:
mode:
authorBryce W. Harrington <b.harrington@samsung.com>2014-04-21 23:51:02 +0000
committerKristian Høgsberg <krh@bitplanet.net>2014-04-25 13:19:51 -0700
commitbfd74f40f3804a42a9135b3aef01f626372153ab (patch)
tree28e357c6ba279f66ccf8f6c460de0b2fe8018625 /src/screenshooter.c
parent4c3661fd7bd6a9970a9cc6b7f9573b8617401bd8 (diff)
downloadweston-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.c33
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