diff -ru a/gettext-tools/src/po-gram-gen.y b/gettext-tools/src/po-gram-gen.y
--- a/gettext-tools/src/po-gram-gen.y 2019-03-14 21:17:26.557259243 +0000
+++ b/gettext-tools/src/po-gram-gen.y 2019-03-14 21:56:21.336346494 +0000
@@ -221,15 +221,12 @@
check_obsolete ($1, $3);
check_obsolete ($1, $4);
if (!$1.obsolete || pass_obsolete_entries)
- {
- do_callback_message ($1.ctxt, string2, &$1.pos, $3.string,
- $4.rhs.msgstr, $4.rhs.msgstr_len, &$4.pos,
- $1.prev_ctxt,
- $1.prev_id, $1.prev_id_plural,
- $1.obsolete);
- free ($3.string);
- }
- else
+ do_callback_message ($1.ctxt, string2, &$1.pos, $3.string,
+ $4.rhs.msgstr, $4.rhs.msgstr_len, &$4.pos,
+ $1.prev_ctxt,
+ $1.prev_id, $1.prev_id_plural,
+ $1.obsolete);
+ else
{
free_message_intro ($1);
free (string2);
diff -ru a/gettext-tools/src/read-catalog.c b/gettext-tools/src/read-catalog.c
--- a/gettext-tools/src/read-catalog.c 2019-03-14 21:17:26.561259208 +0000
+++ b/gettext-tools/src/read-catalog.c 2019-03-14 21:59:36.147427473 +0000
@@ -397,6 +397,8 @@
appropriate. */
mp = message_alloc (msgctxt, msgid, msgid_plural, msgstr, msgstr_len,
msgstr_pos);
+ if (msgid_plural != NULL)
+ free (msgid_plural);
mp->prev_msgctxt = prev_msgctxt;
mp->prev_msgid = prev_msgid;
mp->prev_msgid_plural = prev_msgid_plural;
diff -ru a/gettext-tools/tests/Makefile.am b/gettext-tools/tests/Makefile.am
--- a/gettext-tools/tests/Makefile.am 2019-03-14 21:17:26.609258796 +0000
+++ b/gettext-tools/tests/Makefile.am 2019-03-14 22:03:07.070434758 +0000
@@ -94,7 +94,7 @@
xgettext-perl-1 xgettext-perl-2 xgettext-perl-3 xgettext-perl-4 \
xgettext-perl-5 xgettext-perl-6 xgettext-perl-7 xgettext-perl-8 \
xgettext-php-1 xgettext-php-2 xgettext-php-3 xgettext-php-4 \
- xgettext-po-1 \
+ xgettext-po-1 xgettext-po-2 \
xgettext-properties-1 \
xgettext-python-1 xgettext-python-2 xgettext-python-3 \
xgettext-python-4 \
Only in b/gettext-tools/tests: xgettext-po-2