Bug 25090

Summary: Теряет русскую юникодную букву c
Product: Sisyphus Reporter: Anton V. Boyarshinov <boyarsh>
Component: ashAssignee: Alexey Gladkov <legion>
Status: CLOSED FIXED QA Contact: qa-sisyphus
Severity: critical    
Priority: P3 CC: cas, glebfm, kas, ldv, legion, mike, placeholder
Version: unstable   
Hardware: all   
OS: Linux   
URL: http://article.gmane.org/gmane.comp.shells.dash/493
Bug Depends on:    
Bug Blocks: 10446    
Attachments:
Description Flags
0001-BUILTIN-Fix-corruption-of-reads-with-byte-0x81.patch none

Description Anton V. Boyarshinov 2011-02-15 18:14:32 MSK
----с.sh--------
while read a; do
echo "[$a]"
done
/----с.sh--------
echo "фс" | ash ./c.sh
[ф�]
-----------------
echo "фс" | sh ./c.sh
[фс]
Comment 1 Dmitry V. Levin 2011-02-16 04:33:37 MSK
Это regression, ash-0.5.5.1-alt5 из 5.1 букву "с" не теряет.
Ошибка была найдена при помощи strace, который показал, что половина буквы "с" теряется во время read.
Comment 2 Alexey Gladkov 2011-02-17 00:50:41 MSK
Виноват тот патч, который я ревертил в ash-0.5.5.1-alt5.
Comment 3 Dmitry V. Levin 2011-02-24 01:51:22 MSK
(In reply to comment #2)
> Виноват тот патч, который я ревертил в ash-0.5.5.1-alt5.

Можно это как-нибудь быстро исправить, или проще отказаться от ash везде, где используется read?
Comment 4 Alexey Gladkov 2011-02-24 02:36:42 MSK
Быстро исправить нельзя, можно сломать ещё хуже. В debian и тем более в других дистрах патчей на эту тему нет. Варианта три:

1. Отказывайтесь от использования dash;
2. Откатываем dash на тот момент, когда патч можно было откатить, но получаем другие баги;
3. Не спешно исправляем или ждём исправления в апстрим.
Comment 5 Alexey Gladkov 2011-02-24 02:53:52 MSK
Дублирую сюда. Ошибка локализована до коммита. Осталось понять, что в нём так ломает read. У меня есть предположение.
Comment 6 Alexey Gladkov 2011-02-24 03:22:34 MSK
http://git.altlinux.org/people/legion/packages/ash.git?p=ash.git;a=blob;f=src/miscbltin.c;h=653c92f4381a0e1aecec131b3680f6869ca1e253;hb=49a94e2bab1e4f601a9fbdf9615d9e4e0150e412#l121

до вызова rmescapes() символ нормальный, после битый.
Comment 7 Alexey Gladkov 2011-02-24 03:37:09 MSK
Исправить можно. f8231aea37e921492fc7fbd972385ab5b90e8627 на ту же тему, но в другом месте.
Comment 8 Alexey Gladkov 2011-02-24 14:28:02 MSK
Created attachment 4819 [details]
0001-BUILTIN-Fix-corruption-of-reads-with-byte-0x81.patch

Думаю, что раз до коммита 55c46b dash не занимался удалением CTLESC в read, то можно спокойно убрать эту операцию из read.
Comment 9 Repository Robot 2011-02-24 15:14:16 MSK
ash-0.5.6-alt1.20110216 -> sisyphus:

* Thu Feb 24 2011 Alexey Gladkov <legion@altlinux> 0.5.6-alt1.20110216
- New release (0.5.6) and update from upstream git.
- This build provides the following fixes:
  + Fix corruption of readcmd with byte 0x81 (ALT#25090).
Comment 10 Andrey Cherepanov 2011-02-24 16:26:13 MSK
*** Bug 24483 has been marked as a duplicate of this bug. ***