summaryrefslogtreecommitdiff
path: root/libc/misc/locale/locale.c
diff options
context:
space:
mode:
authorBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2012-04-17 23:19:16 +0200
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2012-04-17 23:19:16 +0200
commit15d28c8ce0a7f2d59edd7f068e931041d68511e2 (patch)
treec38df55f14d7efa41c23b6b85b9e7021c32dee03 /libc/misc/locale/locale.c
parent521d842a5e8722496911d12153a183af088b9322 (diff)
locale: avoid segfault freelocale()
PR 4964 Eric Nadler writes: It looks to me like the base structure is not fully initialized with 0 (only a subset of the structure is initialized). This later results in a free of base->collate.index2weight in _locale_set_l. This free tries to free uninitialized memory and segfaults. Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Diffstat (limited to 'libc/misc/locale/locale.c')
-rw-r--r--libc/misc/locale/locale.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/libc/misc/locale/locale.c b/libc/misc/locale/locale.c
index 40303ab14..e8fddf67c 100644
--- a/libc/misc/locale/locale.c
+++ b/libc/misc/locale/locale.c
@@ -1292,7 +1292,7 @@ __locale_t newlocale(int category_mask, const char *locale, __locale_t base)
}
#else
if (!base) {
- base = malloc(sizeof(struct __uclibc_locale_struct));
+ base = calloc(1, sizeof(struct __uclibc_locale_struct));
if (base == NULL)
return base;
_locale_init_l(base);