Strephil
segfault рекурсия сегфолт Например, shell. В sh есть функции, соответственно, есть и рекурсивные функции.
Рекурсия — это прямой путь к переполнению стека.
Если у меня есть sh, значит, он будет сегфолтится, и это типа не будет ошибкой.
Если я хочу, чтобы программы на моём компьютере никогда не сегфолтились, что я должен сделать с sh? Выкинуть поддержку функций? Выкинуть вызов функции из другой функции? Ограничить глубину вызовов разумным числом? Например, 8? Если хочешь глубже — возвращать ошибку? Пожалуй, последнее звучит разумно.
Strephil
segfault сишечка Программа сегфолтится в каком-то другом месте, не там, где ошибка. По корке видно, что испорчен регистр r20, в его старшую часть записано что-то не то.
Как оно туда попало? не понятно.
Пока что моя гипотеза, регистр сохранялся в стеке, и пока он там лежал, я где-то в этот стек поднасрал, и из стека он вылез уже порченый. Но как я мог насрать столь филигранно, чтобы испортить только старшую часть этого регистра? Я не знаю.
lovesan
segfault Если кто не знал, @segfault — говноед-копрофил, не моет руки после туалета, и сосет хуи . Не здоровайтесь с ним, а сразу посылайте нахуй, где увидите.
Strephil
быдлокод segfault это я совсем в другом месте забыл звездочку поставить, поэтому размер оказался некорректный, и что-то там в памяти перетёрлось, вот потом и вылетало при вызове malloc.

Я успешный программист. Поправить один segfault занимает час.
segfault
segfault говно persistent Haskell Не придумал лучшего способа отладить, кроме как навтыкать трейсов, хотите посмотреть ?
% dist/build/stupid/stupid
with SqliteConn!!
reset !!!!!!!!
reset !!!!!!!!
reset !!!!!!!!
Migrating: CREATE TABLE "persist"("id" INTEGER PRIMARY KEY,"pico" NUMERIC(22,12) NOT NULL)
reset !!!!!!!!
reset !!!!!!!!
insert !!!!
reset !!!!!!!!
reset !!!!!!!!
reset !!!!!!!!
reset !!!!!!!!
select !!!1111
"get PersistInt64 1: Expected Rational, received: PersistDouble 24.44455524"
reset !!!!!!!!
reset !!!!!!!!
close connection !!11!111
reset !!!!!!!!
zsh: segmentation fault dist/build/stupid/stupid
А вот код проекта
bpaste.net
Как такое может быть я просто не понимаю, ведь reset вызывается лишь один раз — внутри bracketP в функции get ... Ну ладно вызовы ДО "select !!!!!" там я не сильно смотрел да и миграция базы и все такое, пусть там дохрена запросов, но после вызова select делается два reset, да еще один после закрытия конекта, я нихуя не понимаю как так то !!!
segfault
segfault persistent Haskell Отписываюсь про вчерашние изыскания моего сегфолта в персистенте.
Сегфолт возникает в функции sqlite3_reset, когда withConnection запускается внутри ResourceT, а не наоборот, как и должно быть. Сегфолт вызывается ошибкой конвертирования данных из PersistValue в целевой тип во время селекта, вернее не самой этой ошибкой, конечно, а происходит при возникновении этой ошибки. При чем, если внутри ResourceT просто вручную сделать error "blabla", то ошибка не вызывает сегфолта.
Сам сегфолт возникает в функции sqlite3_reset (биндинг), скорее всего из-за того, что соединение закрывается раньше, чем финализируется Statement (ведь ResourceT снаружи WithConnection, правда финализация все равно должна происходить в bracketP). Другое предположение: Statement финализируется дважды, один раз, при возникновении ошибки внутри bracketP, второй раз в runResourceT по каким — то мистическим причинам. Только не ясно при чем сдесь тогда withConnection.
Короче до конца еще не разобрался, кому интересно вот github.com код. В ветке fixedval мой код поверх Сноймановского master.
Есть предложения как отлаживать кроме отладочной печати ?
alkov
Linux segfault VirtualBox Копирование ячейки 1Совской таблицы из терминала (remmina, freerdp) и вставка в 1С в вбоксовской виртуалке приводит к падению последней:
Dec 28 20:30:50 ubuntu kernel: [93518.301869] VirtualBox[5117]: segfault at 539 ip 00007f9d4973fd16 sp 00007f9d48c84790 error 6 in VBoxC.so[7f9d49704000+bb000]
Воспроизвёл 2 раза. VBox последний из 3-й ветки, Аддишнсы соответствующие
Mazdaywik
bug Linux segfault GCC забавы Оказывается, программу можно свалить на SEGFAULT, указав специально подобранное значение n в операторе new T[n] на 32-разрядной системе. Т.е. упомянутый оператор сам по себе порождает SEGFAULT (а не только успешное завершение или исключение std::bad_alloc). О потенциальной уязвимости такого кода я узнал из книжки "24 смертных греха компьютерной безопасности" (авторов не помню, должна нагуглиться). Код (в первом комменте) я откомпилировал 5 компиляторами:

* MinGW g++ 3.2.3
* Borland C++ 5.5
* Сишный компилятор из Microsoft Visual Studio 8
* g++ 2.95.3 под QNX
* qcc 2.95.3 под QNX (фактически, разновидность g++ с другими аргументами командной строки)

Свободен от ошибки был только рантайм компилятора из MS VS.

Сам "эксплойт" в комменте.

Тестирование на других ОС (включая последний тег) и под другими компиляторами приветствуется)

Слабо объяснить результаты тестов?