iconvconfig: Fix multiple issues
commit9429049c178b3af3d6afeb3717ff1f2214dc9572
authorSiddhesh Poyarekar <siddhesh@sourceware.org>
Mon, 28 Jun 2021 03:45:55 +0000 (28 09:15 +0530)
committerSiddhesh Poyarekar <siddhesh@sourceware.org>
Mon, 28 Jun 2021 03:45:55 +0000 (28 09:15 +0530)
tree5326e9e4118c65d9511ae55b3a7c2e20bf854ef9
parent5adda61f62b77384718b4c0d8336ade8f2b4b35c
iconvconfig: Fix multiple issues

It was noticed on big-endian systems that msgfmt would fail with the
following error:

msgfmt: gconv_builtin.c:70: __gconv_get_builtin_trans: Assertion `cnt < sizeof (map) / sizeof (map[0])' failed.
Aborted (core dumped)

This is only seen on installed systems because it was due to a
corrupted gconv-modules.cache.  iconvconfig had the following issues
(it was specifically freeing fulldir that caused this issue, but other
cleanups are also needed) that this patch fixes.

- Add prefix only if dir starts with '/'
- Use asprintf instead of mempcpy so that the directory string is NULL
  terminated
- Make a copy of the directory reference in new_module so that fulldir
  can be freed within the same scope in handle_dir.

Reviewed-by: Florian Weimer <fweimer@redhat.com>
iconv/Makefile
iconv/iconvconfig.c