[PATCH weston 2/3] screenshooter: fix various memory handling
Marek Chalupa
mchqwerty at gmail.com
Wed Dec 10 02:48:29 PST 2014
On 9 December 2014 at 17:49, Derek Foreman <derekf at osg.samsung.com> wrote:
> 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...
>
Yep, man pages say that free(NULL) is a no-op.
Until now I've thought that NULL is invalid arg for free()... Man keeps
learning :)
>
> > 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
> >
>
>
Thanks for reviewing, sending new patch with the free() thing fixed
Marek
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/wayland-devel/attachments/20141210/3fba77ff/attachment-0001.html>
More information about the wayland-devel
mailing list