diff options
author | Richard Hansen <rhansen@rhansen.org> | 2020-08-07 10:07:15 -0400 |
---|---|---|
committer | Dan McDonald <danmcd@joyent.com> | 2020-08-23 19:39:37 -0400 |
commit | 0a9a25a293d437b1563e1d8479fef8f3795ba817 (patch) | |
tree | 5c264e0bfabc6ea2c788cd60e4efc32f825aea3b /usr/src/lib | |
parent | 5fae793b9b02afd1f3f434f3a915a64c08edc7b2 (diff) | |
download | illumos-joyent-0a9a25a293d437b1563e1d8479fef8f3795ba817.tar.gz |
13021 Invalid state if bindtextdomain() fails during re-binding
Reviewed by: Joshua M. Clulow <josh@sysmgr.org>
Approved by: Dan McDonald <danmcd@joyent.com>
Diffstat (limited to 'usr/src/lib')
-rw-r--r-- | usr/src/lib/libc/port/i18n/gettext_real.c | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/usr/src/lib/libc/port/i18n/gettext_real.c b/usr/src/lib/libc/port/i18n/gettext_real.c index 6045d000fe..6e5b8054ae 100644 --- a/usr/src/lib/libc/port/i18n/gettext_real.c +++ b/usr/src/lib/libc/port/i18n/gettext_real.c @@ -58,7 +58,7 @@ char * _real_gettext_u(const char *domain, const char *msgid1, const char *msgid2, unsigned long int ln, int category, int plural, locale_t loc) { - char msgfile[MAXPATHLEN]; /* 1024 */ + char msgfile[MAXPATHLEN]; /* 1024 */ char mydomain[TEXTDOMAINMAX + 1]; /* 256 + 1 */ char *cur_binding; /* points to current binding in list */ const char *cur_locale; @@ -326,7 +326,7 @@ static int process_nlspath(const char *cur_domain, const char *cur_msgloc, const char *nlspath, char **binding) { - char *s; /* generic string ptr */ + char *s; /* generic string ptr */ char *territory; /* our current territory element */ char *codeset; /* our current codeset element */ char *s1; /* for handling territory */ @@ -684,12 +684,12 @@ _real_bindtextdomain_u(const char *domain, const char *binding, return (*binding_addr); } /* replace existing binding with new binding */ - if (*binding_addr) { - free(*binding_addr); - } - if ((*binding_addr = strdup(binding)) == NULL) { + char *new_binding = strdup(binding); + if (new_binding == NULL) { return (NULL); } + free(*binding_addr); + *binding_addr = new_binding; #ifdef GETTEXT_DEBUG printlist(); #endif |