diff options
author | Alan Coopersmith <alan.coopersmith@oracle.com> | 2013-08-10 11:07:47 -0700 |
---|---|---|
committer | Ulrich Sibiller <uli42@gmx.de> | 2016-10-19 21:40:28 +0200 |
commit | 0574a55ebd9243cd8d0a5d0ee6161c598f99aef4 (patch) | |
tree | 181c06bb8eb62b171dcd0fc6577c5227f0202c24 | |
parent | a6d9409b060a23ad709a03a14518091cab55ee3e (diff) | |
download | nx-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.c | 11 |
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); |