Attempting to track a bug in ecore_x_randr_12 where we get a segfault
authordevilhorns <devilhorns@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 15 Oct 2010 23:19:45 +0000 (23:19 +0000)
committerdevilhorns <devilhorns@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 15 Oct 2010 23:19:45 +0000 (23:19 +0000)
when trying to free the mode_info. Not much functional difference with
this commit except that we do not call strndup if the nameLength is
<= 0.

git-svn-id: http://svn.enlightenment.org/svn/e/trunk/ecore@53477 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/lib/ecore_x/xlib/ecore_x_randr_12.c

index b6bdf2d..bd56228 100644 (file)
@@ -386,7 +386,7 @@ ecore_x_randr_mode_info_get(Ecore_X_Window root, Ecore_X_Randr_Mode mode)
    int i;
 
    if (_ecore_x_randr_root_validate(root) &&
-       (res = _ecore_x_randr_get_screen_resources (_ecore_x_disp, root)))
+       (res = _ecore_x_randr_get_screen_resources(_ecore_x_disp, root)))
      {
         for (i = 0; i < res->nmode; i++)
           {
@@ -404,15 +404,14 @@ ecore_x_randr_mode_info_get(Ecore_X_Window root, Ecore_X_Randr_Mode mode)
                   ret->vSyncStart = res->modes[i].vSyncStart;
                   ret->vSyncEnd = res->modes[i].vSyncEnd;
                   ret->vTotal = res->modes[i].vTotal;
-                  if (!(ret->name =
-                           strndup(res->modes[i].name, res->modes[i].nameLength)))
+                  ret->name = NULL;
+                  ret->nameLength = 0;
+                  if (res->modes[i].nameLength > 0) 
                     {
-                       ret->name = NULL;
-                       ret->nameLength = 0;
+                       ret->nameLength = res->modes[i].nameLength;
+                       ret->name = strndup(res->modes[i].name, 
+                                           res->modes[i].nameLength);
                     }
-                  else
-                     ret->nameLength = res->modes[i].nameLength;
-
                   ret->modeFlags = res->modes[i].modeFlags;
                   break;
                }
@@ -437,12 +436,12 @@ ecore_x_randr_mode_info_free(Ecore_X_Randr_Mode_Info *mode_info)
 #ifdef ECORE_XRANDR
    RANDR_CHECK_1_2_RET();
    if (!mode_info)
-      return;
+     return;
 
    if (mode_info->name)
-      free(mode_info->name);
+     free(mode_info->name);
 
-      free(mode_info);
+   free(mode_info);
    mode_info = NULL;
 #endif
 }