e_input_evdev: prevent to access NULL list 57/295557/1 accepted/tizen/unified/20230712.040731
authorJihoon Kim <jihoon48.kim@samsung.com>
Mon, 10 Jul 2023 10:42:33 +0000 (19:42 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Tue, 11 Jul 2023 00:45:15 +0000 (09:45 +0900)
Change-Id: I404d9f9cb525df8903e486db8abfb3bcc00d0a55
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
src/bin/e_input_evdev.c
src/bin/e_input_event.c

index 8f2b58e..d8af470 100644 (file)
@@ -6,6 +6,8 @@
 
 #include <glib.h>
 
+#define G_LIST_GET_DATA(list) ((list) ? (((GList *)(list))->data) : NULL)
+
 static void  _device_modifiers_update(E_Input_Evdev *edev);
 static void  _device_configured_size_get(E_Input_Evdev *edev, int *x, int *y, int *w, int *h);
 static void  _device_output_assign(E_Input_Evdev *edev, E_Input_Seat_Capabilities cap);
@@ -418,9 +420,9 @@ e_input_evdev_get_e_device(const char *path, Ecore_Device_Class clas)
 
    dev_list = e_device_list_get();
    if (!dev_list) return NULL;
-   for (l = dev_list, dev = dev_list->data;
+   for (l = dev_list, dev = dev_list->data; \
         l; \
-        l = g_list_next(l), dev = l->data)
+        l = g_list_next(l), dev = G_LIST_GET_DATA(l))
      {
         if (!dev) continue;
         identifier = e_device_identifier_get(dev);
@@ -567,7 +569,7 @@ _device_handle_key(struct libinput_device *device, struct libinput_event_keyboar
      {
         for (glist = edev->e_dev_list, e_dev_data = edev->e_dev_list->data;
              glist; \
-             glist = g_list_next(l), e_dev_data = l->data)
+             glist = g_list_next(glist), e_dev_data = G_LIST_GET_DATA(glist))
           {
              if (e_device_class_get(e_dev_data) == ECORE_DEVICE_CLASS_KEYBOARD)
                {
index 84fa8f7..70ad0a5 100755 (executable)
@@ -205,6 +205,8 @@ E_API void
 e_input_event_add(E_Input_Event_Source *source, int event_type, void *ev_data, ev_free_func free_func, void *free_func_data)
 {
    E_Input_Event *ev = (E_Input_Event *)calloc(1, sizeof(E_Input_Event));
+   if (!ev) return;
+
    ev->ev_data = ev_data;
    ev->event_type = event_type;
    ev->free_func = free_func;