aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/lib/modules/im/ximcp/imLcPrs.c
diff options
context:
space:
mode:
Diffstat (limited to 'nx-X11/lib/modules/im/ximcp/imLcPrs.c')
-rw-r--r--nx-X11/lib/modules/im/ximcp/imLcPrs.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/nx-X11/lib/modules/im/ximcp/imLcPrs.c b/nx-X11/lib/modules/im/ximcp/imLcPrs.c
index fa992e5d3..d374d6ca8 100644
--- a/nx-X11/lib/modules/im/ximcp/imLcPrs.c
+++ b/nx-X11/lib/modules/im/ximcp/imLcPrs.c
@@ -501,7 +501,7 @@ parseline(
if ((filename = TransFileName(im, tokenbuf)) == NULL)
goto error;
infp = _XFopenFile(filename, "r");
- Xfree(filename);
+ Xfree(filename);
if (infp == NULL)
goto error;
parsestringfile(infp, im, depth);
@@ -676,8 +676,10 @@ parseline(
goto error;
b->tree = new;
b->treesize = newsize;
+ /* Re-derive top after realloc() to avoid undefined behaviour
+ (and crashes on architectures that track pointer bounds). */
if (top >= (DTIndex *) old && top < (DTIndex *) &old[oldsize])
- top = (DTIndex *) (((char *) top) + (((char *)b->tree)-(char *)old));
+ top = (DTIndex *) (((char *)new) + (((char *)top)-(char *)old));
}
p = &b->tree[b->treeused];
p->keysym = buf[i].keysym;