Для gawk-3.1.5-alt1 наблюдаются ошибки при работе match при установленной локали ru_RU.UTF-8. В gawk-3.1.4-alt2 такое поведение не наблюдалось. Имеем кусок текста: $ cat>foo FOO=BAR ## #This_is_a_comments #This_is_a_comments ^D Выполняем скрипт: $ LC_ALL=ru_RU.KOI8-R gawk '{ print match ($1,"^ *(#|$)") }' < foo 0 1 1 1 1 $ Т.е. первая строка - не комментарий, потом 4 комментария - всё правильно. То же, но с UTF-8, приводит к ошибке: $ LC_ALL=ru_RU.UTF-8 gawk '{ print match ($1,"^ *(#|$)") }' < foo 0 1 1 1 *** glibc detected *** double free or corruption (fasttop): 0x0a000888 *** Aborted В локали en_EN.UTF-8 всё работает. 'BEGIN {FC="NO SPLITTING"}' ситуацию не меняет. И самое занятное: меняем первую строку данных на 'FO=BA' Получаем нечто вида: $ gawk '{ print match ($1,"^ *(#|$)") }' < foo 0 4527853 1 1 *** glibc detected *** double free or corruption (fasttop): 0x08868f58 *** abort $
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.