aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/lib/X11/imLcLkup.c
diff options
context:
space:
mode:
authorErkki Seppälä <erkki.seppala@vincit.fi>2011-01-31 14:02:15 +0200
committerUlrich Sibiller <uli42@gmx.de>2016-10-19 21:40:26 +0200
commit81422098f57f568499de2fba55a606c74575aba3 (patch)
treee791986e4212eaead39ad851da1c8dc7c290bdc9 /nx-X11/lib/X11/imLcLkup.c
parenta8598e06240df4423aea79e659846409be6a75e9 (diff)
downloadnx-libs-81422098f57f568499de2fba55a606c74575aba3.tar.gz
nx-libs-81422098f57f568499de2fba55a606c74575aba3.tar.bz2
nx-libs-81422098f57f568499de2fba55a606c74575aba3.zip
ximcp/imLckup: Handle negative return value from _Xlcwctomb
Fixed by negative value to memcpy by checking for the negative return value of _Xlcwctomb and returning 0/XLookupNone in that case. a negative value was passed to memcpy Unfortunately the other return values for *status don't fit into the error (which appears to indicate some internal error or running out of memory). The other valid status codes are XBufferOverflow, XLookupNone, XLookupChars, XLookupKeySym, and XLookupBoth. Each of these has a specific meaning attached. Reviewed-by: Ander Conselvan de Oliveira <ander.conselvan-de-oliveira@nokia.com> Signed-off-by: Erkki Seppälä <erkki.seppala@vincit.fi> Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> Backported-to-NX-by: Ulrich Sibiller <uli42@gmx.de>
Diffstat (limited to 'nx-X11/lib/X11/imLcLkup.c')
-rw-r--r--nx-X11/lib/X11/imLcLkup.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/nx-X11/lib/X11/imLcLkup.c b/nx-X11/lib/X11/imLcLkup.c
index 9449b9f43..f2f96e280 100644
--- a/nx-X11/lib/X11/imLcLkup.c
+++ b/nx-X11/lib/X11/imLcLkup.c
@@ -63,6 +63,10 @@ _XimLocalMbLookupString(XIC xic, XKeyEvent *ev, char *buffer, int bytes,
unsigned char pattern = ic->private.local.brl_committed;
char mb[XLC_PUBLIC(ic->core.im->core.lcd, mb_cur_max)];
ret = _Xlcwctomb(ic->core.im->core.lcd, mb, BRL_UC_ROW | pattern);
+ if(ret < 0) {
+ if(status) *status = XLookupNone;
+ return(0);
+ }
if(ret > bytes) {
if(status) *status = XBufferOverflow;
return(ret);