[Fix prevent issues]
authorShinwoo Kim <cinoo.kim@samsung.com>
Wed, 10 Jun 2015 02:25:40 +0000 (11:25 +0900)
committerLukasz Stanislawski <l.stanislaws@samsung.com>
Wed, 10 Jun 2015 10:45:49 +0000 (19:45 +0900)
of navigator.c
 - CID 389096 Dereference null return value
 - CID 397278 Dereference null return value
 - CID 399629 Dereference null return value
 - CID 436264 Dereference null return value
 - CID 436266 Dereference null return value
 - CID 436267 Dereference null return value
 - CID 436277 Dereference null return value
 - CID 436278 Dereference null return value
 - CID 436281 Dereference null return value
 - CID 436282 Dereference null return value
 - CID 436404 Resource leak
 * You don't need to check NULL when you use g_object_unref. Because g_return_if_fail (G_IS_OBJECT (object)) prevents the dereference NULL.

of object_cache.c
 - CID 436449 Dereference before null check

of position_sort.c
 - CID 384795 Dereference null return value
 - CID 392419 Dereference null return value
 - CID 402450 Dereference null return value

of screen_reader_spi.c
 - CID 387658 Dereference null return value
 - CID 389289 Dereference null return value
 - CID 396599 Dereference null return value
 - CID 397835 Dereference null return value
 - CID 400614 Dereference null return value
 - CID 404016 Uninitialized pointer read
 - CID 435865 Resource leak

of screen_reader_tts.c
 - CID 387027 Dereference null return value

Change-Id: I8b6b82d770fda31ddc2615539e26d4529353db78

src/navigator.c
src/object_cache.c
src/pivot_chooser.c
src/position_sort.c
src/screen_reader_spi.c
src/screen_reader_tts.c

index 9eec622..f15e130 100644 (file)
@@ -164,7 +164,7 @@ display_info_about_object(AtspiAccessible *obj)
    DEBUG("STATES:");
    int a;
    AtspiStateType stat;
-   for (a = 0; a < states->len; ++a)
+   for (a = 0; states && (a < states->len); ++a)
       {
          stat = g_array_index (states, AtspiStateType, a);
          state_name = state_to_char(stat);
@@ -198,7 +198,7 @@ generate_description_for_subtrees(AtspiAccessible *obj)
          child = atspi_accessible_get_child_at_index(obj, i, NULL);
          name = atspi_accessible_get_name(child, NULL);
          DEBUG("%d child name:%s", i, name);
-         if (strncmp(name, "\0", 1))
+         if (name && strncmp(name, "\0", 1))
             {
                strncat(ret, name, sizeof(ret) - strlen(ret) - 1);
             }
@@ -209,6 +209,7 @@ generate_description_for_subtrees(AtspiAccessible *obj)
             {
                strncat(ret, below, sizeof(ret) - strlen(ret) - 1);
             }
+
          g_object_unref(child);
          free(below);
          free(name);
@@ -236,9 +237,9 @@ generate_what_to_read(AtspiAccessible *obj)
 
    display_info_about_object(obj);
 
-   if (strncmp(name, "\0", 1))
+   if (name && strncmp(name, "\0", 1))
       names = strdup(name);
-   else if (strncmp(other, "\0", 1))
+   else if (other && strncmp(other, "\0", 1))
       names = strdup(other);
 
    if (names)
@@ -247,12 +248,18 @@ generate_what_to_read(AtspiAccessible *obj)
          strncat(ret, ", ", 2);
       }
 
-   strncat(ret, role_name, sizeof(ret) - strlen(ret) - 1);
-   if (strncmp(description, "\0", 1))
-      strncat(ret, ", ", 2);
-   strncat(ret, description, sizeof(ret) - strlen(ret) - 1);
+   if (role_name)
+      strncat(ret, role_name, sizeof(ret) - strlen(ret) - 1);
+
+   if (description)
+      {
+         if (strncmp(description, "\0", 1))
+            strncat(ret, ", ", 2);
+         strncat(ret, description, sizeof(ret) - strlen(ret) - 1);
+      }
 
    free(name);
+   free(names);
    free(description);
    free(role_name);
    free(other);
@@ -658,7 +665,13 @@ static void _value_inc_widget(void)
    current_widget = current_obj;
 
    role = atspi_accessible_get_role_name(current_widget, &err);
+   if (!role)
+      {
+         ERROR("The role is null");
+         return;
+      }
    GERROR_CHECK(err)
+
    if(!strcmp(role, "entry"))
       {
          text_interface = atspi_accessible_get_text_iface(current_widget);
@@ -714,7 +727,13 @@ static void _value_dec_widget(void)
    current_widget = current_obj;
 
    role = atspi_accessible_get_role_name(current_widget, &err);
+   if (!role)
+      {
+         ERROR("The role is null");
+         return;
+      }
    GERROR_CHECK(err)
+
    if(!strcmp(role, "entry"))
       {
          text_interface = atspi_accessible_get_text_iface(current_widget);
@@ -785,6 +804,11 @@ static void _activate_widget(void)
    current_widget = current_obj;
 
    roleName = atspi_accessible_get_role_name(current_widget, &err);
+   if (!roleName)
+      {
+         ERROR("The role name is null");
+         return;
+      }
    GERROR_CHECK(err)
    DEBUG("Widget role prev: %s\n", roleName);
 
index aa8a47a..c72a706 100644 (file)
@@ -58,17 +58,16 @@ static Eina_List*
 _cache_candidates_list_prepare(AtspiAccessible *root)
 {
    DEBUG("START");
+
+   if (!root) return NULL;
    AtspiAccessible *r = atspi_accessible_get_parent(root, NULL);
    if (r)
       DEBUG("From application:%s [%s]", atspi_accessible_get_name(r, NULL), atspi_accessible_get_role_name(r, NULL));
    DEBUG("Preparing candidates from root window: %s [%s]", atspi_accessible_get_name(root, NULL), atspi_accessible_get_role_name(root, NULL));
 
-
    Eina_List *toprocess = NULL, *ret = NULL;
    int n, i;
 
-   if (!root) return NULL;
-
    // Keep ref counter +1 on every object in returned list
    g_object_ref(root);
    toprocess = eina_list_append(toprocess, root);
index 1025727..3c4f8e0 100644 (file)
@@ -34,6 +34,7 @@ _pivot_with_state_top_down_find(AtspiAccessible *parent, AtspiStateType type)
                if (ret) break;
             }
       }
+
    g_object_unref(states);
 
    return ret;
index d330915..cf9dc28 100644 (file)
@@ -15,6 +15,12 @@ _sort_vertically(const void *a, const void *b)
    cA = object_cache_get(objA);
    cB = object_cache_get(objB);
 
+   if (!cA || !cB)
+      {
+         ERROR("Cache is not ready yet");
+         return 0;
+      }
+
    if (cA->bounds->y == cB->bounds->y)
       return 0;
    else if (cA->bounds->y > cB->bounds->y)
@@ -35,6 +41,12 @@ _sort_horizontally(const void *a, const void *b)
    cA = object_cache_get(objA);
    cB = object_cache_get(objB);
 
+   if (!cA || !cB)
+      {
+         ERROR("Cache is not ready yet");
+         return 0;
+      }
+
    if (cA->bounds->x == cB->bounds->x)
       {
          if (cA->bounds->y > cB->bounds->y)
@@ -64,6 +76,11 @@ _get_zones(const Eina_List *objs)
          {
             oc = object_cache_get(obj);
 
+            if (!oc)
+               {
+                  ERROR("Cache is not ready yet");
+                  continue;
+               }
             // some objects may implement AtspiCompoment interface, however
             // they do not have valid sizes.
             if (!oc->bounds || (oc->bounds->width < 0) || oc->bounds->height < 0)
index 06283ba..59f88e8 100644 (file)
@@ -84,7 +84,7 @@ char *generate_description_for_subtree(AtspiAccessible *obj)
          child = atspi_accessible_get_child_at_index(obj, i, NULL);
          name = atspi_accessible_get_name(child, NULL);
          DEBUG("%d child name:%s", i, name);
-         if (strncmp(name, "\0", 1))
+         if (name && strncmp(name, "\0", 1))
             {
                strncat(ret, name, sizeof(ret) - strlen(ret) - 1);
             }
@@ -120,9 +120,9 @@ static char *spi_on_state_changed_get_text(AtspiEvent *event, void *user_data)
    DEBUG("->->->->->-> WIDGET GAINED HIGHLIGHT: %s <-<-<-<-<-<-<-", name);
    DEBUG("->->->->->-> FROM SUBTREE HAS NAME:  %s <-<-<-<-<-<-<-", other);
 
-   if (strncmp(name, "\0", 1))
+   if (name && strncmp(name, "\0", 1))
       names = strdup(name);
-   else if (strncmp(other, "\0", 1))
+   else if (other && strncmp(other, "\0", 1))
       names = strdup(other);
 
    if (names)
@@ -131,12 +131,18 @@ static char *spi_on_state_changed_get_text(AtspiEvent *event, void *user_data)
          strncat(ret, ", ", 2);
       }
 
-   strncat(ret, role_name, sizeof(ret) - strlen(ret) - 1);
-   if (strncmp(description, "\0", 1))
-      strncat(ret, ", ", 2);
-   strncat(ret, description, sizeof(ret) - strlen(ret) - 1);
+   if (role_name)
+      strncat(ret, role_name, sizeof(ret) - strlen(ret) - 1);
+
+   if (description)
+      {
+         if (strncmp(description, "\0", 1))
+            strncat(ret, ", ", 2);
+         strncat(ret, description, sizeof(ret) - strlen(ret) - 1);
+      }
 
    free(name);
+   free(names);
    free(description);
    free(role_name);
    free(other);
@@ -196,7 +202,7 @@ static char *spi_on_caret_move_get_text(AtspiEvent *event, void *user_data)
 static char *spi_on_value_changed_get_text(AtspiEvent *event, void *user_data)
 {
    Service_Data *sd = (Service_Data*)user_data;
-   char *text_to_read;
+   char *text_to_read = NULL;
 
    sd->currently_focused = event->source;
 
index 79ff8bd..5a3a5f6 100644 (file)
@@ -78,6 +78,11 @@ bool get_supported_voices_cb(tts_h tts, const char* language, int voice_type, vo
 
    Service_Data *sd = user_data;
    Voice_Info *vi = calloc(1, sizeof(Voice_Info));
+   if(!vi)
+      {
+         ERROR(MEMORY_ERROR);
+         return  ECORE_CALLBACK_CANCEL;
+      }
 
    if(asprintf(&vi->language, "%s",language) < 0)
       {