Summary: | Wrong behavior of 'match' function with ru_RU.UTF-8 locale | ||
---|---|---|---|
Product: | Sisyphus | Reporter: | Nikolay A. Fetisov <naf> |
Component: | gawk | Assignee: | placeholder <placeholder> |
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus |
Severity: | major | ||
Priority: | P2 | CC: | glebfm, ldv, php-coder, placeholder |
Version: | unstable | ||
Hardware: | all | ||
OS: | Linux |
Description
Nikolay A. Fetisov
2006-07-16 22:05:00 MSD
C gawk-3.1.5-alt2 ситуация без изменений. Более короткий пример, правда, без ошибок защиты памяти: $ LC_ALL=ru_RU.KOI8-R gawk '{ print match(""," *") }' </etc/passwd 1 1 ... 1 $ LC_ALL=ru_RU.UTF-8 gawk '{ print match(""," *") }' </etc/passwd 5215989 164758841 164758841 ... /etc/passwd взят просто как существующий текстовый файл. Произвольное количество пробелов в пустой строке содержится, результатом match() должна быть '1'. Воспроизводится. Вот backtrace, вдруг понадобится: *** glibc detected *** gawk: double free or corruption (fasttop): 0x08097ce0 *** ======= Backtrace: ========= /lib/libc.so.6[0xb7eb9619] /lib/libc.so.6(cfree+0x7e)[0xb7ebab70] gawk(str2wstr+0x30)[0x806ee6d] gawk(do_match+0x137)[0x8059146] gawk(r_tree_eval+0x519)[0x80809ce] gawk(do_print+0x105)[0x805afc9] gawk(interpret+0x4d9)[0x807ef00] gawk(interpret+0x1c0)[0x807ebe7] gawk(do_input+0x38)[0x806c53e] gawk(main+0xff6)[0x806e5f1] /lib/libc.so.6(__libc_start_main+0xdc)[0xb7e6f174] gawk[0x804d081] В результате исследования выяснилось: - аналогичная бага есть и исправлена в OpenSUSE (см. https://bugzilla.novell.com/show_bug.cgi?id=218161) - бага уже исправлена автором и патч доступен (см. http://lists.gnu.org/archive/html/bug-gnu-utils/2006-07/msg00096.html) - после наложения приведённого патча gawk на двух приведённых примерах больше не падает - пример из комментария #2 с файлом /etc/passwd это совсем другая бага Исправление для баги с падением gawk доступно в моём git-репозитории: http://git.altlinux.org/people/php_coder/packages/?p=gawk.git;a=commit;h=b3bc379e1c0bce2b8e4d6bc4c47b4a542f3e9176 Fixed in 3.1.5-alt3. |