summaryrefslogtreecommitdiff
path: root/utf8.c
diff options
context:
space:
mode:
authorschwarze@openbsd.org <schwarze@openbsd.org>2018-08-21 13:56:27 +0000
committerDamien Miller <djm@mindrot.org>2018-08-22 07:52:26 +1000
commitb8ae02a2896778b8984c7f51566c7f0f56fa8b56 (patch)
tree7f49c80208d83ffa96dd562f1506bb68659ad718 /utf8.c
parentbc44ee088ad269d232e514f037c87ada4c2fd3f0 (diff)
upstream: AIX reports the CODESET as "ISO8859-1" in the POSIX locale.
Treating that as a safe encoding is OK because even when other systems return that string for real ISO8859-1, it is still safe in the sense that it is ASCII-compatible and stateless. Issue reported by Val dot Baranov at duke dot edu. Additional information provided by Michael dot Felt at felt dot demon dot nl. Tested by Michael Felt on AIX 6.1 and by Val Baranov on AIX 7.1. Tweak and OK djm@. OpenBSD-Commit-ID: 36f1210e0b229817d10eb490d6038f507b8256a7
Diffstat (limited to 'utf8.c')
-rw-r--r--utf8.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/utf8.c b/utf8.c
index bc131385f..db7cb8f35 100644
--- a/utf8.c
+++ b/utf8.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: utf8.c,v 1.7 2017/05/31 09:15:42 deraadt Exp $ */ 1/* $OpenBSD: utf8.c,v 1.8 2018/08/21 13:56:27 schwarze Exp $ */
2/* 2/*
3 * Copyright (c) 2016 Ingo Schwarze <schwarze@openbsd.org> 3 * Copyright (c) 2016 Ingo Schwarze <schwarze@openbsd.org>
4 * 4 *
@@ -53,6 +53,8 @@ static int vasnmprintf(char **, size_t, int *, const char *, va_list);
53 * For state-dependent encodings, recovery is impossible. 53 * For state-dependent encodings, recovery is impossible.
54 * For arbitrary encodings, replacement of non-printable 54 * For arbitrary encodings, replacement of non-printable
55 * characters would be non-trivial and too fragile. 55 * characters would be non-trivial and too fragile.
56 * The comments indicate what nl_langinfo(CODESET)
57 * returns for US-ASCII on various operating systems.
56 */ 58 */
57 59
58static int 60static int
@@ -60,9 +62,12 @@ dangerous_locale(void) {
60 char *loc; 62 char *loc;
61 63
62 loc = nl_langinfo(CODESET); 64 loc = nl_langinfo(CODESET);
63 return strcmp(loc, "US-ASCII") != 0 && strcmp(loc, "UTF-8") != 0 && 65 return strcmp(loc, "UTF-8") != 0 &&
64 strcmp(loc, "ANSI_X3.4-1968") != 0 && strcmp(loc, "646") != 0 && 66 strcmp(loc, "US-ASCII") != 0 && /* OpenBSD */
65 strcmp(loc, "") != 0; 67 strcmp(loc, "ANSI_X3.4-1968") != 0 && /* Linux */
68 strcmp(loc, "ISO8859-1") != 0 && /* AIX */
69 strcmp(loc, "646") != 0 && /* Solaris, NetBSD */
70 strcmp(loc, "") != 0; /* Solaris 6 */
66} 71}
67 72
68static int 73static int