summaryrefslogtreecommitdiff
path: root/usr/src/lib
diff options
context:
space:
mode:
authorRichard Hansen <rhansen@rhansen.org>2020-08-07 10:07:15 -0400
committerDan McDonald <danmcd@joyent.com>2020-08-23 19:39:37 -0400
commit0a9a25a293d437b1563e1d8479fef8f3795ba817 (patch)
tree5c264e0bfabc6ea2c788cd60e4efc32f825aea3b /usr/src/lib
parent5fae793b9b02afd1f3f434f3a915a64c08edc7b2 (diff)
downloadillumos-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.c12
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