PHP. heap corruption detected в phpQuery и Segmentation fault в PHP CLI
Операционные системы 18.09.2009
После переустановки PHP 5.2.10 столкнулся я с такой проблемой как «linked list corrupt on efree () — heap corruption detected» при использовании библиотеки , а также «Segmentation fault» в CLI версии свежеустановленного PHP.
Ошибка «linked list corrupt on efree () — heap corruption detected» проявлялась только в одном месте, и связана была с DOM модулем, как мне казалось. До переустановки я не юзал phpQuery в продакшене, поэтому не мог сказать однозначно повлияла ли это переустановка, или так и было бы с ошибкой.
При запуске любого скрипта в CLI режиме, было нечто подобное:
Segmentation fault
Решение проблемы с Segmentation fault в CLI
Погуглив немного, не нашел ничего путного и запостил на Пыху топик о своей проблеме, пару дней мы думали по этой теме, предлагались разные решения и побороли в первый день «Segmentation fault» в CLI, путем упорядочивания PHP модулей (спасибо пользователю OFF), сейчас у меня так:
extension=simplexml.so
extension=spl.so
extension=mysqli.so
extension=mysql.so
extension=session.so
extension=mcrypt.so
extension=gd.so
extension=json.so
extension=ctype.so
extension=iconv.so
extension=hash.so
extension=curl.so
extension=zlib.so
extension=imagick.so
extension=ffmpeg.so
extension=sphinx.so
extension=pcre.so
extension=memcache.so
extension=memcached.so
extension=dom.so
С тех пор CLI работал исправно и работает до сих пор.
Решение проблемы с heap corruption detected в phpQuery
Признаюсь, я грешил на PHP-модуль «php5-dom», однако проблема оказалась не в нем. Ошибка была вида:
[Thu Sep 17 01:48:23 2009] [error] [client 93.111.111.111] ALERT — linked list corrupt on efree () — heap corruption detected (attacker '93.111.111.111', file '/path/to/kinsburg/path/to/libs/phpquery.php', line 5689), referer: http://kinsburg.ru/path/to/admin/path/to/parser/
где, 93.111.111.111 — ip-адрес моего локального компьютера (аля клиент)
Решение оказалось совсем для меня не очевидным, во всем оказался виноват «Suhosin Patch», который нужен для обеспечения безопасности. Я просто переустановил PHP, но в этот раз отключил Suhosin.
На эту мысль меня натолкнул пост пользователя OFF с Пыха.ру, за что ему огромное спасибо! Были еще варианты решения этой проблемы, но они не венчались успехом.
В данный момент, я планирую включить снова Suhosin Patch, потомучто запускать тот злосчастный скрипт мне необходимо всего раз 3-6 месяцев, а за это время может возникнут патчи бага, либо найдется куда более продуктивное решение.


сухосина фтопку, скрипты на php либо самостоятельно, либо тотальная проверка с оладкой,всех переменных всех методов и классов, с максимальным уровнем предупреждений и исправлением любой баги,любой пустой переменной,с полным осознанием того что написано в скрипте, что он делает и для чего нужен. Во всех подозрительных местах либо написать свой вариант (часто получается изящьнее), либо переименовать переменные (переименовать-переменные =D )
исключить из скрипта символы подавления @ ошибок.
переписать проверки входных данных (если такие есть)
магические кавычки — фтопку только мешают,использовать placeholderы для обращения к базе...
безопасность-безопасность, не надо писать или использовать дырявые скрипты тогда и suhosin не нужен будет...
agat, ага, но не всегда свой код используется (WP, Drupal, etc).
кстати, упорядочивание пхп-экстеншнов — херь полная
единственное, spl надо перед мусклем ставить, а в остальном — бред, по-моему
epsyl, ага, по твоему. Есть целые патчи сортирующие экстеншены в правильном порядке.
Расстановка важна — 100%
epsyl — попробуй на досуге поменять местами, все рухнет...
З.Ы. я пробовал =)
интересно решил проблему
Pandora, что вы этим хотели сказать?