]> git.cameronkatri.com Git - mandoc.git/commitdiff
Never use LC_ALL. On the one hand, it can cause misformatting.
authorIngo Schwarze <schwarze@openbsd.org>
Thu, 12 Nov 2015 21:50:03 +0000 (21:50 +0000)
committerIngo Schwarze <schwarze@openbsd.org>
Thu, 12 Nov 2015 21:50:03 +0000 (21:50 +0000)
On the other hand, it is a security risk because it might cause
buffer overflows.  Use LC_CTYPE only, that's all we need.

term_ascii.c

index c4633b3d6cd23b18959f4d7e46850d65dbb415dc..7215a5971665ab692c7d236b68cc46ef9ebbf323 100644 (file)
@@ -1,4 +1,4 @@
-/*     $Id: term_ascii.c,v 1.51 2015/10/13 22:59:54 schwarze Exp $ */
+/*     $Id: term_ascii.c,v 1.52 2015/11/12 21:50:03 schwarze Exp $ */
 /*
  * Copyright (c) 2010, 2011 Kristaps Dzonsons <kristaps@bsd.lv>
  * Copyright (c) 2014, 2015 Ingo Schwarze <schwarze@openbsd.org>
@@ -88,8 +88,16 @@ ascii_init(enum termenc enc, const struct manoutput *outopts)
 
 #if HAVE_WCHAR
        if (TERMENC_ASCII != enc) {
+
+               /*
+                * Do not change any of this to LC_ALL.  It might break
+                * the formatting by subtly changing the behaviour of
+                * various functions, for example strftime(3).  As a
+                * worst case, it might even cause buffer overflows.
+                */
+
                v = TERMENC_LOCALE == enc ?
-                   setlocale(LC_ALL, "") :
+                   setlocale(LC_CTYPE, "") :
                    setlocale(LC_CTYPE, "en_US.UTF-8");
                if (NULL != v && MB_CUR_MAX > 1) {
                        p->enc = enc;