Bug#314497: vim: Visual select hangs in en_US.utf8 locale

Rob Sims Rob Sims <robsims@robsims.fc.hp.com>, 314497@bugs.debian.org
Thu, 16 Jun 2005 11:12:30 -0600


Package: vim
Version: 1:6.3-071+1
Severity: normal

If LC_ALL=en_US.utf8, the first press of the 'v' key only briefly enters
visual select mode.  After the second press, visual mode is entered.
Letter motion keys work, but hitting the down arrow (or others?) will
hang vim.

Behavior is the same if all LC_* variables are set, and disappears if
they are all unset.

An strace shows:

First 'v':
select(6, [0 3 5], NULL, [0 3], NULL)   = 1 (in [0])
read(0, "v", 4096)                      = 1
select(6, [0 3 5], NULL, [0 3], {0, 0}) = 0 (Timeout)
write(5, "\20\0\3\0\4\0\0\2INCR\20\0\4\0\10\0\0\0MULTIPLE\20\0\5"..., 72) = 72
read(5, 0xbffff470, 32)                 = -1 EAGAIN (Resource temporarily unavailable)
select(6, [5], NULL, NULL, NULL)        = 1 (in [5])
read(5, "\1\0&\0\0\0\0\0\351\0\0\0\0\0\0\0\1\0\0\0\4\0\0\0\310\322"..., 32) = 32
read(5, "\1\0\'\0\0\0\0\0^\1\0\0\0\0\0\0\0\0\0\0\4\0\0\0\310\322"..., 32) = 32
read(5, "\1\0(\0\0\0\0\0`\1\0\0\0\0\0\0\0\0\0\0\4\0\0\0\310\322"..., 32) = 32
read(5, "\1\0)\0\0\0\0\0\237\1\0\0\0\0\0\0\0\0\0\0\4\0\0\0\310\322"..., 32) = 32
write(5, "\26\0\4\0\1\0 \3\1\0\0\0\0\0\0\0\27\0\2\0\1\0\0\0", 24) = 24
read(5, "\1\0+\0\0\0\0\0\1\0 \3\0\0\0\0\0\0\0\0\4\0\0\0\310\322"..., 32) = 32
select(6, [0 3 5], NULL, [0 3], {0, 0}) = 1 (in [5], left {0, 0})
ioctl(5, FIONREAD, [32])                = 0
read(5, "\36\346+\0x\246\n\0\1\0 \3L\0\340\1\1\0\0\0_\1\0\0\17\1"..., 32) = 32
select(6, [5], [], [], {0, 0})          = 0 (Timeout)
write(5, "\22\0\f\0L\0\340\1\17\1\0\0\4\0\0\0 \0\2\0\6\0\0\0\37\0"..., 96) = 96
read(5, "\1\1.\0\0\0\0\0\5\0\0\2\0\0\0\0\0\0\0\0\4\0\0\0\310\322"..., 32) = 32
ioctl(5, FIONREAD, [0])                 = 0
ioctl(5, FIONREAD, [0])                 = 0
select(6, [5], [], [], {0, 0})          = 0 (Timeout)
write(1, "\33[?25l", 6)                 = 6
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost -isig -icanon -echo ...}) = 0
select(6, [0 3 5], NULL, [0 3], {0, 0}) = 0 (Timeout)
select(6, [0 3 5], NULL, [0 3], {0, 0}) = 0 (Timeout)
write(1, "\33[84;1H\33[1m-- VISUAL --\33[m\33[84;1"..., 69) = 69
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost -isig -icanon -echo ...}) = 0
gettimeofday({1118940109, 590507}, NULL) = 0
select(6, [0 3 5], NULL, [0 3], {4, 0}) = 1 (in [5], left {3, 950000})
ioctl(5, FIONREAD, [32])                = 0
read(5, "\36\346.\0x\246\n\0\1\0 \3L\0\340\1\1\0\0\0\235\1\0\0\17"..., 32) = 32
select(6, [5], [], [], {0, 0})          = 0 (Timeout)
open("/usr/X11R6/lib/X11/locale/locale.alias", O_RDONLY) = 4
fstat64(4, {st_mode=S_IFREG|0644, st_size=68207, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40018000
read(4, "#\t$Xorg: locale.alias,v 1.3 2000"..., 4096) = 4096
read(4, "9-1\nca_ES.ISO-8859-1\t\t\t\tca_ES.IS"..., 4096) = 4096
read(4, "GB.ISO8859-1\nENG_GB.8859\t\t\t\t\ten_"..., 4096) = 4096
read(4, "cifies ISO8859-15 as the base ch"..., 4096) = 4096
read(4, "gede\t\t\t\t\tgez_ER.UTF-8\ngez_ET@abe"..., 4096) = 4096
read(4, "\tlg_UG.ISO8859-10\nlg_UG.ISO-8859"..., 4096) = 4096
read(4, "o88591\t\t\t\t\tph_PH.ISO8859-1\npl\t\t\t"..., 4096) = 4096
read(4, "iso88591\t\t\t\t\ttl_PH.ISO8859-1\ntl_"..., 4096) = 4096
read(4, "sh\t\t\t\t\t\tpl_PL.ISO8859-2\nportugue"..., 4096) = 4096
read(4, "251:\t\t\t\tbe_BY.CP1251\nbg:\t\t\t\t\t\tbg"..., 4096) = 4096
read(4, "\t\t\t\tde_LU.ISO8859-15\nde_LU.UTF-8"..., 4096) = 4096
read(4, "_HN.ISO8859-1\nes_HN.iso88591:\t\t\t"..., 4096) = 4096
read(4, "fr_FR.ISO8859-15\nfr_FR.ISO-8859-"..., 4096) = 4096
read(4, "e\n# deleted in the future.\niw:\t\t"..., 4096) = 4096
read(4, "O.ISO8859-15\nnn_NO.ISO-8859-15:\t"..., 4096) = 4096
read(4, "\t\t\t\tsr_YU.ISO8859-5\nsr_YU@cyrill"..., 4096) = 4096
read(4, "3.0\nenglish_uk.8859:\t\t\t\ten_GB.IS"..., 4096) = 2671
read(4, "", 4096)                       = 0
close(4)                                = 0
munmap(0x40018000, 4096)                = 0
open("/usr/X11R6/lib/X11/locale/locale.dir", O_RDONLY) = 4
fstat64(4, {st_mode=S_IFREG|0644, st_size=35376, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40018000
read(4, "#\t$Xorg: locale.dir,v 1.3 2000/0"..., 4096) = 4096
read(4, "PA.ISO8859-1\niso8859-1/XLC_LOCAL"..., 4096) = 4096
read(4, "SO8859-2\niso8859-5/XLC_LOCALE \t\t"..., 4096) = 4096
read(4, "E\t\t\ten_IE.UTF-8\nen_US.UTF-8/XLC_"..., 4096) = 4096
read(4, "E\t\t\tsid_ET.UTF-8\nen_US.UTF-8/XLC"..., 4096) = 4096
read(4, "59-1/XLC_LOCALE:\t\t\ten_NZ.ISO8859"..., 4096) = 4096
read(4, "_LOCALE:\t\t\tmk_MK.ISO8859-5\nmicro"..., 4096) = 4096
read(4, "_US.UTF-8/XLC_LOCALE:\t\t\tar_LB.UT"..., 4096) = 4096
read(4, "lo_LA.UTF-8\nen_US.UTF-8/XLC_LOCA"..., 4096) = 2608
read(4, "", 4096)                       = 0
close(4)                                = 0
munmap(0x40018000, 4096)                = 0
open("/usr/X11R6/lib/X11/locale/en_US.utf8/XI18N_OBJS", O_RDONLY) = -1 ENOENT (No such file or directory)
gettimeofday({1118940109, 641786}, NULL) = 0
write(5, "\2\0\4\0L\0\340\1\0\10\0\0\0\0@\0\22\0\7\0L\0\340\1\17"..., 92) = 92
read(5, 0xbffff020, 32)                 = -1 EAGAIN (Resource temporarily unavailable)
select(6, [5], NULL, NULL, NULL)        = 1 (in [5])
read(5, "\34\3700\0L\0\340\1\17\1\0\0\255\246\n\0\0\0\0\0\255\246"..., 32) = 32
read(5, "\1\0012\0\0\0\0\0\5\0\0\2\0\0\0\0\0\0\0\0\4\0\0\0\310\322"..., 32) = 32
gettimeofday({1118940109, 642244}, NULL) = 0
select(6, [5], [], [], {0, 0})          = 0 (Timeout)
gettimeofday({1118940109, 642460}, NULL) = 0
ioctl(5, FIONREAD, [0])                 = 0
ioctl(5, FIONREAD, [0])                 = 0
gettimeofday({1118940109, 642614}, NULL) = 0
select(6, [5], [], [], {0, 0})          = 0 (Timeout)
gettimeofday({1118940109, 642827}, NULL) = 0
select(6, [0 3 5], NULL, [0 3], {3, 948000}) = 1 (in [5], left {3, 900000})
ioctl(5, FIONREAD, [32])                = 0
read(5, "\34\0002\0L\0\340\1\17\1\0\0\333\246\n\0\1\0\0\0\333\246"..., 32) = 32
gettimeofday({1118940109, 688109}, NULL) = 0
select(6, [5], [], [], {0, 0})          = 0 (Timeout)
gettimeofday({1118940109, 688325}, NULL) = 0
writev(5, [{"\22\0\354\377L\0\340\1\17\1\0\0\235\1\0\0\10\0\7\0\230"..., 24}, {"\1\0\0\0\3300)\0108\226)\10\0\0\0\0*\0\0\0\200\352\24\10"..., 262040}], 2) = 65024
writev(5, [{"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 197040}], 1) = 81280
writev(5, [{"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 115760}], 1) = -1 EFAULT (Bad address)
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost -isig -icanon -echo ...}) = 0
ioctl(0, SNDCTL_TMR_START or TCSETS, {B38400 opost -isig -icanon -echo ...}) = 0
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost -isig -icanon -echo ...}) = 0
write(1, "\33[27m\33[m\33[H\33[2J\33[?25l\33[1;1HBetwe"..., 2047) = 2047
write(1, "                                "..., 2047) = 2047
write(1, "                                "..., 2047) = 2047
write(1, "                                "..., 2047) = 2047
write(1, "                              \33["..., 2047) = 2047
write(1, "                                "..., 2047) = 2047
write(1, "                                "..., 2047) = 2047
write(1, "                                "..., 2047) = 2047
write(1, "                                "..., 697) = 697
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost -isig -icanon -echo ...}) = 0
gettimeofday({1118940109, 701712}, NULL) = 0
select(4, [0 3], NULL, [0 3], {4, 0})   = 0 (Timeout)
select(4, [0 3], NULL, [0 3], NULL)     = 1 (in [0])

Second "v" and arrow:
read(0, "v", 4096)                      = 1
write(1, "\33[?25l\33[84;1H\33[1m-- VISUAL --\33[m"..., 76) = 76
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost -isig -icanon -echo ...}) = 0
gettimeofday({1118940114, 659716}, NULL) = 0
select(4, [0 3], NULL, [0 3], {4, 0})   = 1 (in [0], left {3, 570000})
select(4, [0 3], NULL, [0 3], NULL)     = 1 (in [0])
read(0, "\33OB", 4096)                  = 3
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost -isig -icanon -echo ...}) = 0
gettimeofday({1118940115, 91566}, NULL) = 0
select(4, [0 3], NULL, [0 3], {0, 100000}) = 0 (Timeout)
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost -isig -icanon -echo ...}) = 0
gettimeofday({1118940115, 188428}, NULL) = 0
select(4, [0 3], NULL, [0 3], {0, 100000}) = 0 (Timeout)
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost -isig -icanon -echo ...}) = 0
gettimeofday({1118940115, 288423}, NULL) = 0
select(4, [0 3], NULL, [0 3], {0, 100000}) = 0 (Timeout)
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost -isig -icanon -echo ...}) = 0
gettimeofday({1118940115, 388403}, NULL) = 0
select(4, [0 3], NULL, [0 3], {0, 100000}) = 0 (Timeout)
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost -isig -icanon -echo ...}) = 0
gettimeofday({1118940115, 488424}, NULL) = 0
select(4, [0 3], NULL, [0 3], {0, 100000}) = 0 (Timeout)
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost -isig -icanon -echo ...}) = 0
gettimeofday({1118940115, 588471}, NULL) = 0
select(4, [0 3], NULL, [0 3], {0, 100000}) = 0 (Timeout)
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost -isig -icanon -echo ...}) = 0
gettimeofday({1118940115, 688441}, NULL) = 0
select(4, [0 3], NULL, [0 3], {0, 100000}) = 0 (Timeout)
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost -isig -icanon -echo ...}) = 0
gettimeofday({1118940115, 788499}, NULL) = 0
select(4, [0 3], NULL, [0 3], {0, 100000}) = 0 (Timeout)
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost -isig -icanon -echo ...}) = 0
gettimeofday({1118940115, 888489}, NULL) = 0
select(4, [0 3], NULL, [0 3], {0, 100000}) = 0 (Timeout)
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost -isig -icanon -echo ...}) = 0
gettimeofday({1118940115, 988468}, NULL) = 0
select(4, [0 3], NULL, [0 3], {0, 100000}) = 0 (Timeout)
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost -isig -icanon -echo ...}) = 0
gettimeofday({1118940116, 88491}, NULL) = 0
...
until killed.

-- System Information:
Debian Release: 3.1
Architecture: i386 (i686)
Kernel: Linux 2.4.23-686-mpt-smp-64g-1
Locale: LANG=C, LC_CTYPE=C (charmap=UTF-8) (ignored: LC_ALL set to en_US.utf8)

Versions of packages vim depends on:
ii  dpkg                     1.10.28         Package maintenance system for Deb
ii  libc6                    2.3.2.ds1-22    GNU C Library: Shared libraries an
ii  libgpmg1                 1.19.6-19sarge1 General Purpose Mouse - shared lib
ii  libncurses5              5.4-4           Shared libraries for terminal hand
ii  vim-common               1:6.3-071+1     Vi IMproved - Common files

-- no debconf information