aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Coopersmith <alan.coopersmith@oracle.com>2013-08-10 11:07:47 -0700
committerUlrich Sibiller <uli42@gmx.de>2016-10-19 21:40:28 +0200
commit0574a55ebd9243cd8d0a5d0ee6161c598f99aef4 (patch)
tree181c06bb8eb62b171dcd0fc6577c5227f0202c24
parenta6d9409b060a23ad709a03a14518091cab55ee3e (diff)
downloadnx-libs-0574a55ebd9243cd8d0a5d0ee6161c598f99aef4.tar.gz
nx-libs-0574a55ebd9243cd8d0a5d0ee6161c598f99aef4.tar.bz2
nx-libs-0574a55ebd9243cd8d0a5d0ee6161c598f99aef4.zip
Avoid memory leak/corruption if realloc fails in XlcDL.c:resolve_object()
Previously, if realloc failed to increase the size, we'd still record that we had allocated the larger size, but the pointer to it would be NULL, causing future calls to be broken, and the previous allocation to be lost/leaked. Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: Matthieu Herrb <matthieu.herrb@laas.fr> Backported-to-NX-by: Ulrich Sibiller <uli42@gmx.de>
-rw-r--r--nx-X11/lib/X11/XlcDL.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/nx-X11/lib/X11/XlcDL.c b/nx-X11/lib/X11/XlcDL.c
index 02860a028..2bef4ac12 100644
--- a/nx-X11/lib/X11/XlcDL.c
+++ b/nx-X11/lib/X11/XlcDL.c
@@ -207,12 +207,13 @@ resolve_object(char *path, const char *lc_name)
}
if (lc_count == lc_len) {
- lc_len += OBJECT_INC_LEN;
- xi18n_objects_list = (XI18NObjectsList)
- Xrealloc(xi18n_objects_list,
- sizeof(XI18NObjectsListRec) * lc_len);
- if (!xi18n_objects_list)
+ int new_len = lc_len + OBJECT_INC_LEN;
+ XI18NObjectsListRec *tmp = Xrealloc(xi18n_objects_list,
+ sizeof(XI18NObjectsListRec) * new_len);
+ if (tmp == NULL)
goto done;
+ xi18n_objects_list = tmp;
+ lc_len = new_len;
}
n = parse_line(p, args, 6);