LINUX.ORG.RU

История изменений

Исправление xaizek, (текущая версия) :

Воспроизводится, если вместо return 0 делать exit(0). Вот backtrace:

(gdb) bt
#0  0x00007ffff7a85be0 in do_length () from /lib64/libc.so.6
#1  0x00007ffff7a8560d in __GI__IO_wfile_sync () from /lib64/libc.so.6
#2  0x00007ffff7a8c2d7 in _IO_default_setbuf () from /lib64/libc.so.6
#3  0x00007ffff7a88d89 in __GI__IO_file_setbuf () from /lib64/libc.so.6
#4  0x00007ffff7a8cd91 in _IO_cleanup () from /lib64/libc.so.6
#5  0x00007ffff7a4857b in __run_exit_handlers () from /lib64/libc.so.6
#6  0x00007ffff7a48625 in exit () from /lib64/libc.so.6
#7  0x000000000040083a in main () at tst2.c:13
do_length() как-то затирает стек и всё падает при выходе из этой функции. Возможно, что это вина iconv, так как при определённой длине ввода можно получить:
a.out: ../iconv/skeleton.c:415: __gconv_transform_utf8_internal: Assertion `outbufstart == ((void *)0)' failed.
Может и нет. Я на Slackware, здесь никаких патчей для glibc быть не должно, так что похоже на их баг. В трекере похожего не вижу, но было бы хорошо проверить это ещё на мастере.

Исходная версия xaizek, :

Воспроизводится, если вместо return 0 делать exit(0). Вот backtrace:

(gdb) bt
#0  0x00007ffff7a85be0 in do_length () from /lib64/libc.so.6
#1  0x00007ffff7a8560d in __GI__IO_wfile_sync () from /lib64/libc.so.6
#2  0x00007ffff7a8c2d7 in _IO_default_setbuf () from /lib64/libc.so.6
#3  0x00007ffff7a88d89 in __GI__IO_file_setbuf () from /lib64/libc.so.6
#4  0x00007ffff7a8cd91 in _IO_cleanup () from /lib64/libc.so.6
#5  0x00007ffff7a4857b in __run_exit_handlers () from /lib64/libc.so.6
#6  0x00007ffff7a48625 in exit () from /lib64/libc.so.6
#7  0x000000000040083a in main () at tst2.c:13
do_length() как-то затирает стек. Возможно, что это вина iconv, так как при определённой длине ввода можно получить:
a.out: ../iconv/skeleton.c:415: __gconv_transform_utf8_internal: Assertion `outbufstart == ((void *)0)' failed.
Может и нет. Я на Slackware, здесь никаких патчей для glibc быть не должно, так что похоже на их баг. В трекере похожего не вижу, но было бы хорошо проверить это ещё на мастере.