Bug 16359 - Crash on certain regexp
: Crash on certain regexp
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/gawk)
: unstable
: x86_64 Linux
: P2 normal
Assigned To:
:
:
:
:
:
  Show dependency tree
 
Reported: 2008-07-15 16:14 by
Modified: 2010-06-04 22:41 (History)


Attachments
testcase (2.75 KB, application/octet-stream)
2008-07-15 16:14, Vitaly A. Ostanin
no flags Details


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2008-07-15 16:14:14
Created an attachment (id=2702) [details]
testcase

gawk-3.1.5-alt3

Файлы в аттаче. Воспроизводится так:
cat test.conf | ./bad-write-param.awk
*** glibc detected *** awk: realloc(): invalid next size: 0x0000000000670470
***

cat test.conf | ./ok-write-param.awk
(ожидаемый вывод)
cat test.conf | ./ok2-write-param.awk
(ожидаемый вывод)

Все *.awk - один и тот же скрипт, немного изменённый в части регулярных
выражений. Да, там в gensub используется несуществующая компонента \\5, но и
падений не должно быть.
------- Comment #1 From 2008-07-16 09:10:56 -------
У меня не воспроизвелось:

[c0der@xxx ~/awk-crash]$ cat test.conf| ./bad-write-param.awk >bad
[c0der@xxx ~/awk-crash]$ cat test.conf| ./ok-write-param.awk >ok
[c0der@xxx ~/awk-crash]$ cat test.conf| ./ok2-write-param.awk >ok2
[c0der@xxx ~/awk-crash]$ diff -u bad ok 
[c0der@xxx ~/awk-crash]$ diff -u bad ok2
--- bad 2008-07-16 12:06:19 +0700
+++ ok2 2008-07-16 12:06:31 +0700
@@ -24,7 +24,7 @@
 #report_remote_uri_down        = yes                           # yes = create
the reports if the remote host is down. no = don't make any reports if the host
is down

 #@@ mandatory backup fields
-backup_source          = /usr #source 
+backup_source          = /usr #source
 backup_destination     = $HOME/backup
 backup_exclude         = $HOME/backup *.swp *.tmp

[c1der@xxx ~/awk-crash]$

gawk-3.1.5-alt3, локаль UTF8
------- Comment #2 From 2008-07-16 13:40:29 -------
У меня локаль ru_RU.CP1251, ядро 2.6.18-xen-dom0-alt7, glibc-2.5-alt5.
------- Comment #3 From 2008-07-16 14:17:34 -------
(In reply to comment #2)
> У меня локаль ru_RU.CP1251, ядро 2.6.18-xen-dom0-alt7, glibc-2.5-alt5.

У меня локаль ru_RU.UTF-8, ядро 2.6.18-std-smp-alt7, glibc-2.5.1-alt4

Попробую ещё дома проверить, так ядро свежее и локаль CP1251 как раз.
------- Comment #4 From 2008-07-16 21:18:51 -------
На 2.6.25-std-def-alt6, glibc-2.5.1-alt5, gawk-3.1.5-alt3 и CP1251 падение
воспроизвести не смог.
------- Comment #5 From 2008-07-17 14:51:43 -------
На glibc-2.5.1-alt5 тоже воспроизводится. Забыл сказать: система x86_64.
Получается, что различия только в ядре и, возможно, в архитектуре.
------- Comment #6 From 2008-07-17 14:54:46 -------
>Забыл сказать: система x86_64.

Ну так это существенно меняет дело!
------- Comment #7 From 2008-07-17 14:59:30 -------
Если ещё какие-нибудь детали меняют дело, спрашивайте, не стесняйтесь. Что
вспомнил - написал.
------- Comment #8 From 2008-07-24 17:11:06 -------
Ага! Смог воспроизвести:

[coder@pbf64 awk-crash]$ rpm -q --qf '%{NAME}-%{VERSION}-%{RELEASE} %{ARCH}\n'
gawk glibc 
gawk-3.1.5-alt3 x86_64
glibc-2.5-alt4 x86_64

При этом ядро: 2.6.18-ovz-smp-alt20 и локаль обязательно должна быть однобитная
(т.е. при ru_RU.UTF8 не падает, а при C -- падает).
------- Comment #9 From 2008-07-24 17:30:09 -------
Вот нормальный backtrace:

[coder@pbf64 gawk-3.1.5]$ gdb -q
(gdb) set env LANG=C
(gdb) run -f bad-write-param.awk <test.conf >/dev/null
Starting program: /home/coder/gawk-3.1.5/gawk -f bad-write-param.awk <test.conf
>/dev/null
*** glibc detected *** gawk: realloc(): invalid next size: 0x000000000066e700
***
[skip]
(gdb) bt
#0  0x00002aaaab1783a5 in raise () from /lib64/libc.so.6
#1  0x00002aaaab179730 in abort () from /lib64/libc.so.6
#2  0x00002aaaab1adebb in iswupper () from /lib64/libc.so.6
#3  0x00002aaaab1b2e1e in iswupper () from /lib64/libc.so.6
#4  0x00002aaaab1b5abe in iswupper () from /lib64/libc.so.6
#5  0x00002aaaab1b6cff in realloc () from /lib64/libc.so.6
#6  0x000000000040fc9e in sub_common (tree=<value optimized out>, how_many=1,
backdigs=1) at builtin.c:2455
#7  0x0000000000410504 in do_gensub (tree=<value optimized out>) at
builtin.c:2560
#8  0x000000000043b7d2 in r_tree_eval (tree=0x65bc40, iscond=0) at eval.c:991
#9  0x0000000000411a23 in do_print (tree=0x65bd00) at builtin.c:1670
#10 0x0000000000439bf4 in interpret (tree=0x65bd00) at eval.c:787
#11 0x0000000000439ad0 in interpret (tree=0x65be00) at eval.c:477
#12 0x000000000043a022 in interpret (tree=0x65bf80) at eval.c:484
#13 0x00000000004398cf in interpret (tree=0x65a970) at eval.c:456
#14 0x0000000000426068 in do_input () at io.c:457
#15 0x000000000042822b in main (argc=3, argv=0x7fff0eaaa9d8) at main.c:595
------- Comment #10 From 2008-08-31 05:02:26 -------
а как с этой проблемой в 3.1.6?
------- Comment #11 From 2008-08-31 11:28:28 -------
(In reply to comment #10)
> а как с этой проблемой в 3.1.6?

Когда будет в Сизифе, тогда и проверим.
------- Comment #12 From 2009-03-29 13:52:30 -------
(В ответ на комментарий №10)
> а как с этой проблемой в 3.1.6?

Также.
------- Comment #13 From 2009-03-29 14:20:57 -------
Уменьшил test case до:

printf 'backup_source\t= /home/coder\t#source\n' | gawk
'{if($0~/(^[[:space:]]*backup_source[[:space:]]*=)([^#]*)?(#.*)?$/){print
gensub(/(^[[:space:]]*backup_source[[:space:]]*=)([^#]*)?(#.*)?$/, "\\1 /usr
\\3 \\5", "", $0)}}'
------- Comment #14 From 2010-06-04 22:41:07 -------
gawk-3.1.8-alt1 -> sisyphus:

* Thu Jun 03 2010 Dmitry V. Levin <ldv@altlinux> 3.1.8-alt1
- Updated to 3.1.8 (closes: #4911, #16359).