diff options
author | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2012-04-17 23:19:16 +0200 |
---|---|---|
committer | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2012-04-17 23:19:16 +0200 |
commit | 15d28c8ce0a7f2d59edd7f068e931041d68511e2 (patch) | |
tree | c38df55f14d7efa41c23b6b85b9e7021c32dee03 /libc/misc/locale/locale.c | |
parent | 521d842a5e8722496911d12153a183af088b9322 (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.c | 2 |
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); |