[PATCH weston 2/3] screenshooter: fix various memory handling
Derek Foreman
derekf at osg.samsung.com
Tue Dec 9 08:49:31 PST 2014
On 05/12/14 06:49 AM, Marek Chalupa wrote:
> There were unchecked malloc and free of conditionally allocated
> memory without checking if the memory was really allocated.
> Also simplify error handling in one function.
>
> Signed-off-by: Marek Chalupa <mchqwerty at gmail.com>
> ---
> src/screenshooter.c | 27 +++++++++++++++++++--------
> 1 file changed, 19 insertions(+), 8 deletions(-)
>
> diff --git a/src/screenshooter.c b/src/screenshooter.c
> index 6246cda..b7b1fd0 100644
> --- a/src/screenshooter.c
> +++ b/src/screenshooter.c
> @@ -464,8 +464,11 @@ weston_recorder_free(struct weston_recorder *recorder)
> {
> if (recorder == NULL)
> return;
> +
> + if (recorder->tmpbuf)
> + free(recorder->tmpbuf);
> +
> free(recorder->rect);
> - free(recorder->tmpbuf);
I think recorder->tmpbuf should be NULL if it was never required
(recorder is allocated with zalloc), and free(NULL); is a NOP...
> free(recorder->frame);
> free(recorder);
> }
> @@ -495,12 +498,16 @@ weston_recorder_create(struct weston_output *output, const char *filename)
>
> if ((recorder->frame == NULL) || (recorder->rect == NULL)) {
> weston_log("%s: out of memory\n", __func__);
> - weston_recorder_free(recorder);
> - return;
> + goto err_recorder;
> }
>
> - if (!do_yflip)
> + if (!do_yflip) {
> recorder->tmpbuf = malloc(size);
> + if (recorder->tmpbuf == NULL) {
> + weston_log("%s: out of memory\n", __func__);
> + goto err_recorder;
> + }
Yup, we need this bit.
And I like the goto err_recorder stuff as well, though I guess that's a
matter of preference.
> + }
>
> header.magic = WCAP_HEADER_MAGIC;
>
> @@ -514,8 +521,7 @@ weston_recorder_create(struct weston_output *output, const char *filename)
> break;
> default:
> weston_log("unknown recorder format\n");
> - weston_recorder_free(recorder);
> - return;
> + goto err_recorder;
> }
>
> recorder->fd = open(filename,
> @@ -523,8 +529,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);
> - weston_recorder_free(recorder);
> - return;
> + goto err_recorder;
> }
>
> header.width = output->current_mode->width;
> @@ -535,6 +540,12 @@ weston_recorder_create(struct weston_output *output, const char *filename)
> wl_signal_add(&output->frame_signal, &recorder->frame_listener);
> output->disable_planes++;
> weston_output_damage(output);
> +
> + return;
> +
> +err_recorder:
> + weston_recorder_free(recorder);
> + return;
> }
>
> static void
>
More information about the wayland-devel
mailing list