From 3fe71f438648cc6282b6b7563331849be9671916 Mon Sep 17 00:00:00 2001 From: schwarze <> Date: Thu, 29 Mar 2018 16:34:25 +0000 Subject: Fix three bugs in setlocale(3): 1. setlocale(LC_ALL, "A"); setlocale(LC_CTYPE, "T"); setlocale(LC_ALL, NULL); must return "A/T/A/A/A/A", not "A". Fix this by always initializing the LC_ALL entry of newgl to "" in dupgl(). Reported by Karl Williamson on bugs@, thanks! 2. Do not leak newgl when strdup(3) fails in setlocale(3). 3. For setlocale(LC_ALL, "C/C/fr_FR.UTF-8/C/C/C"); correctly set _GlobalRuneLocale; i found 2. and 3. while looking at the code. Feedback on a buggy earlier version and OK martijn@. --- src/regress/lib/libc/locale/setlocale/setlocale.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/regress/lib/libc/locale/setlocale/setlocale.c b/src/regress/lib/libc/locale/setlocale/setlocale.c index f2a8427535..82245df5c5 100644 --- a/src/regress/lib/libc/locale/setlocale/setlocale.c +++ b/src/regress/lib/libc/locale/setlocale/setlocale.c @@ -1,4 +1,4 @@ -/* $OpenBSD: setlocale.c,v 1.3 2017/02/25 07:28:32 jsg Exp $ */ +/* $OpenBSD: setlocale.c,v 1.4 2018/03/29 16:34:25 schwarze Exp $ */ /* * Copyright (c) 2015 Sebastien Marie * @@ -75,7 +75,6 @@ main(int argc, char *argv[]) /* load from env */ /* NOTE: we don't support non-C locales for some categories */ - /*test_setlocale("fr_FR.UTF-8", LC_ALL, "");*/ /* set */ test_setlocale("fr_FR.UTF-8", LC_CTYPE, ""); /* set */ test_setlocale("fr_FR.UTF-8", LC_MESSAGES, ""); /* set */ test_MB_CUR_MAX(4); @@ -113,6 +112,7 @@ main(int argc, char *argv[]) test_setlocale("C", LC_ALL, "C"); /* reset */ test_setlocale("invalid.UTF-8", LC_CTYPE, "invalid.UTF-8"); /* set */ test_setlocale("invalid.UTF-8", LC_CTYPE, NULL); + test_setlocale("C/invalid.UTF-8/C/C/C/C", LC_ALL, NULL); test_MB_CUR_MAX(4); /* with invalid codeset (is an error) */ -- cgit v1.2.3-55-g6feb