Re: testsuite error on Solaris 2.6

[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

 



Hi,

Tom G. Christensen wrote on Fri, Mar 31, 2017 at 09:30:10PM +0200:
> On 27/03/17 17:06, Tom G. Christensen wrote:

>> I'm seeing an error in the testsuite on Solaris 2.6:
>> test_utf8: ........................
>> regress/unittests/utf8/tests.c:48 test #25 "c_esc"
>> ASSERT_INT_EQ(len, wantlen) failed:
>>          len = -1
>>      wantlen = 5
>> 
>> 
>> It seems this might be related to the fact that on Solaris < 7
>> nl_langinfo(CODESET) returns an empty string when the codeset is ASCII.
>> 
>> To verify I put together a small testprogram that does a setlocale
>> followed by nl_langinfo(CODESET) and for the 'C' locale it returns an
>> empty string while 'da' returns ISO8859-1 as expected.

> I worked some more on this and comparing locales and their codesets
> between Solaris 2.6 and 7 I'm reasonably sure that an empty codeset
> value means ascii on Solaris 2.6.

I'm not quite sure how relevant Solaris 2.6 still is, but i dimly
remeber having seen systems where nl_langinfo(3) returns "" for
ASCII before, though i have forgotten which ones.  

> So to ensure proper operation and get rid of the error in the testsuite
> I've added "" as a valid alias for ascii in dangerous_locales().
> With this change in place the testsuite runs with no errors.

That would be the following patch.  I don't see any downside.
A system where nl_codeset(3) would return "" for some non-ASCII
and non-UTF-8 locale would probably cause you worse grief than
sftp(1) or scp(1) potentially screwing up your terminal settings.

OK?
  Ingo


Index: utf8.c
===================================================================
RCS file: /cvs/src/usr.bin/ssh/utf8.c,v
retrieving revision 1.5
diff -u -p -r1.5 utf8.c
--- utf8.c	19 Feb 2017 00:10:57 -0000	1.5
+++ utf8.c	2 Apr 2017 13:35:38 -0000
@@ -51,8 +51,8 @@ dangerous_locale(void) {
 	char	*loc;
 
 	loc = nl_langinfo(CODESET);
-	return strcmp(loc, "US-ASCII") != 0 && strcmp(loc, "UTF-8") != 0 &&
-	    strcmp(loc, "ANSI_X3.4-1968") != 0;
+	return *loc != '\0' && strcmp(loc, "US-ASCII") != 0 &&
+	    strcmp(loc, "UTF-8") != 0 && strcmp(loc, "ANSI_X3.4-1968") != 0;
 }
 
 static int
_______________________________________________
openssh-unix-dev mailing list
openssh-unix-dev@xxxxxxxxxxx
https://lists.mindrot.org/mailman/listinfo/openssh-unix-dev



[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux