Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 15 Jul 2016 15:55:46 +0200
From:      Thomas Eberhardt <sneakywumpus@gmail.com>
To:        freebsd-stable@FreeBSD.org
Subject:   stable/11 Problems with Unicode character and ls(1) sorting
Message-ID:  <A00985AB-C9B7-4D22-B5D1-DF485370D8BF@gmail.com>

next in thread | raw e-mail | index | archive | help
% uname -a
FreeBSD clarence.ocp.lan 11.0-BETA1 FreeBSD 11.0-BETA1 #0 r302457: Sat =
Jul  9 10:41:40 CEST 2016     =
thomas@clarence.ocp.lan:/usr/obj/usr/src/sys/GENERIC  amd64

% locale
LANG=3Den_US.UTF-8
LC_CTYPE=3D"en_US.UTF-8"
LC_COLLATE=3D"en_US.UTF-8"
LC_TIME=3D"en_US.UTF-8"
LC_NUMERIC=3D"en_US.UTF-8"
LC_MONETARY=3D"en_US.UTF-8"
LC_MESSAGES=3D"en_US.UTF-8"
LC_ALL=3D

% mkdir x
% touch x/=C3=86on1
% ls x
=C3=86on1
% touch x/=C3=86on2
% ls -f x=20
.     ..    =C3=86on1  =C3=86on2
% ls -f x | hd
00000000  2e 0a 2e 2e 0a c3 86 6f  6e 31 0a c3 86 6f 6e 32  =
|.......on1...on2|
00000010  0a                                                |.|
00000011
% ls x
[hangs and consumes 100% CPU]
^C

% gdb /bin/ls
[=E2=80=A6]
(gdb) run x
Starting program: /bin/ls x
[hangs]
^C
Program received signal SIGINT, Interrupt.
0x0000000800ffa9dd in _collate_lookup (table=3D<value optimized out>, =
t=3D<value optimized out>,=20
    len=3D<value optimized out>, pri=3D<value optimized out>, =
which=3D<value optimized out>, state=3D<value optimized out>)
    at /usr/src/lib/libc/locale/collate.c:340
340			*pri =3D table->char_pri_table[*t].pri[which];
Current language:  auto; currently minimal
(gdb) bt
#0  0x0000000800ffa9dd in _collate_lookup (table=3D<value optimized =
out>, t=3D<value optimized out>,=20
    len=3D<value optimized out>, pri=3D<value optimized out>, =
which=3D<value optimized out>, state=3D<value optimized out>)
    at /usr/src/lib/libc/locale/collate.c:340
#1  0x0000000800fdc38a in wcscoll_l (ws1=3D<value optimized out>, =
ws2=3D<value optimized out>,=20
    locale=3D<value optimized out>) at =
/usr/src/lib/libc/string/wcscoll.c:158
#2  0x0000000800fd9071 in strcoll_l (s=3D<value optimized out>, =
s2=3D<value optimized out>, locale=3D0x80124f338)
    at /usr/src/lib/libc/string/strcoll.c:101
#3  0x0000000800fee253 in qsort (a=3D<value optimized out>, n=3D<value =
optimized out>, es=3D<value optimized out>,=20
    cmp=3D0x800f28530 <fts_compar>) at =
/usr/src/lib/libc/stdlib/qsort.c:130
#4  0x0000000800f27397 in fts_sort (sp=3D<value optimized out>, =
head=3D<value optimized out>, nitems=3D<value optimized out>)
    at /usr/src/lib/libc/gen/fts.c:995
#5  0x0000000800f2848e in fts_children (sp=3D<value optimized out>, =
instr=3DError accessing memory address 0x2: Bad address.
) at /usr/src/lib/libc/gen/fts.c:570
#6  0x00000000004030df in traverse (argc=3D<value optimized out>, =
argv=3D<value optimized out>,=20
    options=3D<value optimized out>) at /usr/src/bin/ls/ls.c:576
#7  0x0000000000402eeb in main (argc=3D<value optimized out>, =
argv=3D<value optimized out>) at /usr/src/bin/ls/ls.c:498
#8  0x00000000004020cf in _start ()
#9  0x0000000800629000 in ?? ()
#10 0x0000000000000000 in ?? ()
(gdb) br strcoll.c:101
Breakpoint 1 at 0x800fd9063: file /usr/src/lib/libc/string/strcoll.c, =
line 101.
(gdb) run
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /bin/ls x
[=E2=80=A6]

Breakpoint 1, strcoll_l (s=3D<value optimized out>, s2=3D<value =
optimized out>, locale=3D0x80124f338)
    at /usr/src/lib/libc/string/strcoll.c:101
101		ret =3D wcscoll_l(w1, w2, locale);
(gdb) n
[wcscoll_l never returns]


Does anybody know what=E2=80=99s going on? This is on a ZFS filesystem =
if that matters.

Regards,
Thomas Eberhardt




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?A00985AB-C9B7-4D22-B5D1-DF485370D8BF>