From d0a37260501ef8e0b4a29c90f71f15b2f7493ff9 Mon Sep 17 00:00:00 2001 From: Alexander Potashev Date: Fri, 27 May 2011 04:40:23 +0400 Subject: [PATCH 2/5] Fix memory leak: do not duplicate msgid_plural in message_alloc --- message.c | 5 +++-- msgmerge.c | 3 ++- read-mo.c | 4 ++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/message.c b/message.c index 5162b06..33c55b4 100644 --- a/message.c +++ b/message.c @@ -110,7 +110,7 @@ message_alloc (const char *msgctxt, mp = XMALLOC (message_ty); mp->msgctxt = msgctxt; mp->msgid = msgid; - mp->msgid_plural = (msgid_plural != NULL ? xstrdup (msgid_plural) : NULL); + mp->msgid_plural = msgid_plural; mp->msgstr = msgstr; mp->msgstr_len = msgstr_len; mp->pos = *pp; @@ -211,7 +211,8 @@ message_copy (message_ty *mp) size_t j, i; result = message_alloc (mp->msgctxt != NULL ? xstrdup (mp->msgctxt) : NULL, - xstrdup (mp->msgid), mp->msgid_plural, + xstrdup (mp->msgid), + mp->msgid_plural != NULL ? xstrdup (mp->msgid_plural) : NULL, mp->msgstr, mp->msgstr_len, &mp->pos); if (mp->comment) diff --git a/msgmerge.c b/msgmerge.c index 6fe5fdb..81bd06e 100644 --- a/msgmerge.c +++ b/msgmerge.c @@ -1244,7 +1244,8 @@ message_merge (message_ty *def, message_ty *ref, bool force_fuzzy, } result = message_alloc (ref->msgctxt != NULL ? xstrdup (ref->msgctxt) : NULL, - xstrdup (ref->msgid), ref->msgid_plural, + xstrdup (ref->msgid), + ref->msgid_plural != NULL ? xstrdup (ref->msgid_plural) : NULL, msgstr, msgstr_len, &def->pos); /* Take the comments from the definition file. There will be none at diff --git a/read-mo.c b/read-mo.c index 9e0220c..946e91d 100644 --- a/read-mo.c +++ b/read-mo.c @@ -323,7 +323,7 @@ read_mo_file (message_list_ty *mlp, const char *filename) mp = message_alloc (msgctxt, msgid, (strlen (msgid) + 1 < msgid_len - ? msgid + strlen (msgid) + 1 + ? xstrdup (msgid + strlen (msgid) + 1) : NULL), msgstr, msgstr_len, &pos); @@ -381,7 +381,7 @@ read_mo_file (message_list_ty *mlp, const char *filename) mp = message_alloc (msgctxt, msgid, (strlen (msgid) + 1 < msgid_len - ? msgid + strlen (msgid) + 1 + ? xstrdup (msgid + strlen (msgid) + 1) : NULL), msgstr, msgstr_len, &pos); -- 1.7.5.rc3