Найден одним из новичков cyberforum. Ковыряем потихоньку. Всё ведёт к кривой реализации libio, показывая, что setlocale нипричём. Кстати, без setlocale баг не воспроизводится. Может кто-нибудь знает в чём дело???
[faust@archlinux РАзная всячина]$ cat 1.c && gcc 1.c && ./a.out
#include <string.h>
#include <errno.h>
#include <locale.h>
#include <stdio.h>
#include <wchar.h>
int main()
{
setlocale(LC_ALL, "ru_RU.UTF-8"); /*а вот тут уже до лампочки
обращения setlocale к потоку stdin - он уже "широкий" и сегфолтов/стеков уже не будет*/
/* printf("1. errno = %s\n", strerror(errno));*/
getwc(stdin);
/* printf("2. errno = %s\n", strerror(errno));*/
return 0;
}
1111111111111111111111111
*** stack smashing detected ***: <unknown> terminated
Аварийный останов (стек памяти сброшен на диск)
[faust@archlinux РАзная всячина]$ cat 1.c && clang 1.c && ./a.out
#include <string.h>
#include <errno.h>
#include <locale.h>
#include <stdio.h>
#include <wchar.h>
int main()
{
setlocale(LC_ALL, "ru_RU.UTF-8"); /*а вот тут уже до лампочки
обращения setlocale к потоку stdin - он уже "широкий" и сегфолтов/стеков уже не будет*/
/* printf("1. errno = %s\n", strerror(errno));*/
getwc(stdin);
/* printf("2. errno = %s\n", strerror(errno));*/
return 0;
}
111111111111111111111111
*** stack smashing detected ***: <unknown> terminated
Аварийный останов (стек памяти сброшен на диск)
[faust@archlinux РАзная всячина]$