diff --git a/modules/im/ximcp/imInsClbk.c b/modules/im/ximcp/imInsClbk.c index d5527e0..97ed616 100644 --- a/modules/im/ximcp/imInsClbk.c +++ b/modules/im/ximcp/imInsClbk.c @@ -175,7 +175,14 @@ _XimRegisterIMInstantiateCallback( icb->display = display; icb->lcd = lcd; MakeLocale( lcd, icb->name ); - icb->modifiers = lcd->core->modifiers; /* XXXXX */ + if ( lcd->core->modifiers ) { + icb->modifiers = strdup( lcd->core->modifiers ); /* XXXXX */ + if ( icb->modifiers == NULL ) { + Xfree( icb ); + return( False ); + } + } else + icb->modifiers = NULL; icb->rdb = rdb; icb->res_name = res_name; icb->res_class = res_class; @@ -258,6 +265,8 @@ _XimUnRegisterIMInstantiateCallback( else picb->next = icb->next; _XCloseLC( icb->lcd ); + if( icb->modifiers ) + free( icb->modifiers ); XFree( icb ); } return( True );