forked from enlightenment/efl
ecore-x: fix null derefs in window prop code
Summary: handle cases where null params could be passed and cause crashes @fix Reviewers: devilhorns Reviewed By: devilhorns Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D9899
This commit is contained in:
parent
f37c996ad4
commit
9d16a44334
|
@ -81,8 +81,9 @@ ecore_x_window_prop_card32_get(Ecore_X_Window win,
|
||||||
if (num_ret < len)
|
if (num_ret < len)
|
||||||
len = num_ret;
|
len = num_ret;
|
||||||
|
|
||||||
for (i = 0; i < len; i++)
|
if (val)
|
||||||
val[i] = ((unsigned long *)prop_ret)[i];
|
for (i = 0; i < len; i++)
|
||||||
|
val[i] = ((unsigned long *)prop_ret)[i];
|
||||||
num = len;
|
num = len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,7 +113,7 @@ ecore_x_window_prop_card32_list_get(Ecore_X_Window win,
|
||||||
int num;
|
int num;
|
||||||
|
|
||||||
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
||||||
*plst = NULL;
|
if (plst) *plst = NULL;
|
||||||
prop_ret = NULL;
|
prop_ret = NULL;
|
||||||
if (XGetWindowProperty(_ecore_x_disp, win, atom, 0, 0x7fffffff, False,
|
if (XGetWindowProperty(_ecore_x_disp, win, atom, 0, 0x7fffffff, False,
|
||||||
XA_CARDINAL, &type_ret, &format_ret, &num_ret,
|
XA_CARDINAL, &type_ret, &format_ret, &num_ret,
|
||||||
|
@ -123,7 +124,7 @@ ecore_x_window_prop_card32_list_get(Ecore_X_Window win,
|
||||||
num = -1;
|
num = -1;
|
||||||
else if ((num_ret == 0) || (!prop_ret))
|
else if ((num_ret == 0) || (!prop_ret))
|
||||||
num = 0;
|
num = 0;
|
||||||
else
|
else if (plst)
|
||||||
{
|
{
|
||||||
val = malloc(num_ret * sizeof(unsigned int));
|
val = malloc(num_ret * sizeof(unsigned int));
|
||||||
if (!val)
|
if (!val)
|
||||||
|
@ -136,6 +137,8 @@ ecore_x_window_prop_card32_list_get(Ecore_X_Window win,
|
||||||
num = num_ret;
|
num = num_ret;
|
||||||
*plst = val;
|
*plst = val;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
num = num_ret;
|
||||||
|
|
||||||
if (_ecore_xlib_sync) ecore_x_sync();
|
if (_ecore_xlib_sync) ecore_x_sync();
|
||||||
if (prop_ret)
|
if (prop_ret)
|
||||||
|
@ -214,8 +217,9 @@ ecore_x_window_prop_xid_get(Ecore_X_Window win,
|
||||||
if (num_ret < len)
|
if (num_ret < len)
|
||||||
len = num_ret;
|
len = num_ret;
|
||||||
|
|
||||||
for (i = 0; i < len; i++)
|
if (lst)
|
||||||
lst[i] = ((unsigned long *)prop_ret)[i];
|
for (i = 0; i < len; i++)
|
||||||
|
lst[i] = ((unsigned long *)prop_ret)[i];
|
||||||
num = len;
|
num = len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -249,7 +253,7 @@ ecore_x_window_prop_xid_list_get(Ecore_X_Window win,
|
||||||
Eina_Bool success;
|
Eina_Bool success;
|
||||||
|
|
||||||
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
LOGFN(__FILE__, __LINE__, __FUNCTION__);
|
||||||
*val = NULL;
|
if (val) *val = NULL;
|
||||||
prop_ret = NULL;
|
prop_ret = NULL;
|
||||||
success = (XGetWindowProperty(_ecore_x_disp, win, atom, 0, 0x7fffffff, False,
|
success = (XGetWindowProperty(_ecore_x_disp, win, atom, 0, 0x7fffffff, False,
|
||||||
type, &type_ret, &format_ret, &num_ret,
|
type, &type_ret, &format_ret, &num_ret,
|
||||||
|
@ -261,7 +265,7 @@ ecore_x_window_prop_xid_list_get(Ecore_X_Window win,
|
||||||
num = -1;
|
num = -1;
|
||||||
else if (num_ret == 0 || !prop_ret)
|
else if (num_ret == 0 || !prop_ret)
|
||||||
num = 0;
|
num = 0;
|
||||||
else
|
else if (val)
|
||||||
{
|
{
|
||||||
alst = malloc(num_ret * sizeof(Ecore_X_ID));
|
alst = malloc(num_ret * sizeof(Ecore_X_ID));
|
||||||
for (i = 0; i < num_ret; i++)
|
for (i = 0; i < num_ret; i++)
|
||||||
|
@ -269,6 +273,8 @@ ecore_x_window_prop_xid_list_get(Ecore_X_Window win,
|
||||||
num = num_ret;
|
num = num_ret;
|
||||||
*val = alst;
|
*val = alst;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
num = num_ret;
|
||||||
|
|
||||||
if (prop_ret)
|
if (prop_ret)
|
||||||
XFree(prop_ret);
|
XFree(prop_ret);
|
||||||
|
|
Loading…
Reference in New Issue