Add missing NULL checks to ICWrap

ICWrap.c dereferences the xim parameter passed in from client code without a
NULL check.  I have seen mplayer trigger this resulting in a segfault.  In this
case mplayer had called XOpenIM and NULL was returned which was later passed
into XCreateIC.

Patch originally by Drew Moseley <drew_moseley@mentor.com>.

Signed-off-by: Ross Burton <ross.burton@intel.com>
Reviewed-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
This commit is contained in:
Ross Burton 2015-05-18 14:49:01 +01:00 committed by Alan Coopersmith
parent 26e0d2de29
commit c827edcd1c

View file

@ -169,7 +169,7 @@ XSetIMValues(XIM im, ...)
va_list var;
int total_count;
XIMArg *args;
char *ret;
char *ret = NULL;
/*
* so count the stuff dangling here
@ -185,7 +185,8 @@ XSetIMValues(XIM im, ...)
_XIMVaToNestedList(var, total_count, &args);
va_end(var);
ret = (*im->methods->set_values) (im, args);
if (im && im->methods)
ret = (*im->methods->set_values) (im, args);
Xfree(args);
return ret;
}
@ -196,7 +197,7 @@ XGetIMValues(XIM im, ...)
va_list var;
int total_count;
XIMArg *args;
char *ret;
char *ret = NULL;
/*
* so count the stuff dangling here
@ -212,7 +213,8 @@ XGetIMValues(XIM im, ...)
_XIMVaToNestedList(var, total_count, &args);
va_end(var);
ret = (*im->methods->get_values) (im, args);
if (im && im->methods)
ret = (*im->methods->get_values) (im, args);
Xfree(args);
return ret;
}
@ -228,7 +230,7 @@ XCreateIC(XIM im, ...)
va_list var;
int total_count;
XIMArg *args;
XIC ic;
XIC ic = NULL;
/*
* so count the stuff dangling here
@ -244,7 +246,8 @@ XCreateIC(XIM im, ...)
_XIMVaToNestedList(var, total_count, &args);
va_end(var);
ic = (XIC) (*im->methods->create_ic) (im, args);
if (im && im->methods)
ic = (XIC) (*im->methods->create_ic) (im, args);
Xfree(args);
if (ic) {
ic->core.next = im->core.ic_chain;