Mercurial > gnulib
changeset 37491:0806fba611ab
argp: avoid extraneous translation and mem leak with empty pre doc
* lib/argp-help.c (argp_doc): Never translate the empty string,
when "\v" is the first or last character of the string, as that
has a reserved meaning to return the header info from a po file.
This also fixes a small memory leak in the !post case.
The issue can be seen with this command for example:
LC_MESSAGES=en_US grub2-mknetdir --help
author | Andrei Borzenkov <arvidjaar@gmail.com> |
---|---|
date | Tue, 02 Dec 2014 16:05:10 +0000 |
parents | c8c7d549579e |
children | 27eff69becc8 |
files | ChangeLog lib/argp-help.c |
diffstat | 2 files changed, 16 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog Sat Nov 29 06:00:25 2014 -0800 +++ b/ChangeLog Tue Dec 02 16:05:10 2014 +0000 @@ -1,3 +1,13 @@ +2014-12-02 Andrei Borzenkov <arvidjaar@gmail.com> + + argp: avoid extraneous translation and mem leak with empty pre doc + * lib/argp-help.c (argp_doc): Never translate the empty string, + when "\v" is the first or last character of the string, as that + has a reserved meaning to return the header info from a po file. + This also fixes a small memory leak in the !post case. + The issue can be seen with this command for example: + LC_MESSAGES=en_US grub2-mknetdir --help + 2014-11-27 Daiki Ueno <ueno@gnu.org> uniname/uniname-tests: skip if system's libunistring is used
--- a/lib/argp-help.c Sat Nov 29 06:00:25 2014 -0800 +++ b/lib/argp-help.c Tue Dec 02 16:05:10 2014 +0000 @@ -1506,11 +1506,15 @@ if (vt) { if (post) - inp_text = vt + 1; + { + inp_text = vt + 1; + if (! *inp_text) + inp_text = 0; + } else { inp_text_len = vt - argp->doc; - inp_text = __strndup (argp->doc, inp_text_len); + inp_text = inp_text_len ? __strndup (argp->doc, inp_text_len) : 0; } } else