[weston,6/7] text: Don't crash if a seat has no keyboard

Submitted by Derek Foreman on Dec. 5, 2014, 9:38 p.m.

Details

Message ID 1417815521-11304-7-git-send-email-derekf@osg.samsung.com
State Superseded
Headers show

Not browsing as part of any series.

Commit Message

Derek Foreman Dec. 5, 2014, 9:38 p.m.
A keyboard might not be present in a seat, so check that before
dereferencing keyboard related pointers.

Also, use the keyboard pointer we set to shorten the code a little bit.

Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
---
 src/text-backend.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

Patch hide | download patch | download mbox

diff --git a/src/text-backend.c b/src/text-backend.c
index e50569a..b8b526e 100644
--- a/src/text-backend.c
+++ b/src/text-backend.c
@@ -755,15 +755,19 @@  input_method_context_create(struct text_input *model,
 static void
 input_method_context_end_keyboard_grab(struct input_method_context *context)
 {
-	struct weston_keyboard_grab *grab =
-		&context->input_method->seat->keyboard->input_method_grab;
-	struct weston_keyboard *keyboard = grab->keyboard;
+	struct weston_keyboard_grab *grab;
+	struct weston_keyboard *keyboard;
+
+	if (!context->keyboard)
+		return;
 
-	if (!grab->keyboard)
+	grab = &context->input_method->seat->keyboard->input_method_grab;
+	keyboard = grab->keyboard;
+	if (!keyboard)
 		return;
 
-	if (grab->keyboard->grab == grab)
-		weston_keyboard_end_grab(grab->keyboard);
+	if (keyboard->grab == grab)
+		weston_keyboard_end_grab(keyboard);
 
 	keyboard->input_method_resource = NULL;
 }

Comments

Hi,

On 5 December 2014 at 21:38, Derek Foreman <derekf@osg.samsung.com> wrote:

> +       if (!context->keyboard)
> +               return;
>
> -       if (!grab->keyboard)
> +       grab = &context->input_method->seat->keyboard->input_method_grab;
>


The discrepancy between the test and the dereference here makes me a little
itchy.

Cheers,
Daniel