[PATCH] text-backend: check calloc results
Pekka Paalanen
ppaalanen at gmail.com
Thu May 15 23:34:15 PDT 2014
On Thu, 15 May 2014 13:03:50 -0700
"U. Artie Eoff" <ullysses.a.eoff at intel.com> wrote:
> Signed-off-by: U. Artie Eoff <ullysses.a.eoff at intel.com>
> ---
> src/text-backend.c | 11 +++++++++++
> 1 file changed, 11 insertions(+)
>
> diff --git a/src/text-backend.c b/src/text-backend.c
> index d6a6f3b..362a3fa 100644
> --- a/src/text-backend.c
> +++ b/src/text-backend.c
> @@ -358,6 +358,8 @@ static void text_input_manager_create_text_input(struct wl_client *client,
> struct text_input *text_input;
>
> text_input = calloc(1, sizeof *text_input);
> + if (text_input == NULL)
> + return;
Silent failure here is a no-go, it confuses the client, as server vs.
client state on what objects exist disagrees, and the client will get a
random protocol error eventually.
Better to just use wl_resource_post_no_memory() here to kill the client
immediately.
>
> text_input->resource =
> wl_resource_create(client, &wl_text_input_interface, 1, id);
> @@ -411,6 +413,9 @@ text_input_manager_create(struct weston_compositor *ec)
>
> text_input_manager = calloc(1, sizeof *text_input_manager);
>
> + if (text_input_manager == NULL)
> + return;
We're already pretty screwed if this fails anyway, but is hiding the
failure ok?
> +
> text_input_manager->ec = ec;
>
> text_input_manager->text_input_manager_global =
wl_global_create() could fail, too.
> @@ -917,6 +922,9 @@ handle_seat_created(struct wl_listener *listener,
>
> input_method = calloc(1, sizeof *input_method);
>
> + if (input_method == NULL)
> + return;
> +
Ditto.
> input_method->seat = seat;
> input_method->model = NULL;
> input_method->focus_listener_initialized = 0;
> @@ -969,6 +977,9 @@ text_backend_init(struct weston_compositor *ec)
>
> text_backend = calloc(1, sizeof(*text_backend));
>
> + if (text_backend == NULL)
> + return -1;
> +
> text_backend->compositor = ec;
>
> text_backend->seat_created_listener.notify = handle_seat_created;
Looks like lots of places are just hiding failures instead of
communicating them to the caller, or at least yelling about it.
Still, wl_resource_post_no_memory() is the only thing I'd want to see
fixed in this patch before it gets in, the others are not so important
as they are not client-triggerable.
Thanks,
pq
More information about the wayland-devel
mailing list