Обновить

Комментарии 52

НЛО прилетело и опубликовало эту надпись здесь
vim, gcc, gdb, палкой-копалкой.

Думаю, у разработчика PHP бы это заняло меньше времени.
НЛО прилетело и опубликовало эту надпись здесь
Не вижу ничего преступного в том что человек похвастал тем, что он реально сделал, что имеет реальную пользу, и что реально не является очень простой задачей, тем более что он сделал это не просто так, а после соот-щего топика.
Если бы пост начинался %известное лицо% пофиксило баг #ххххх — то наш bvfalcon и много другой школоты бы пост заплюсовало.

А так как это всего лишь смертный davinchi сделал, то школоте не понять=)

davinchi — спасибо за пост, так коротко живо и интересно написано=)
хвастовство — грех
НЛО прилетело и опубликовало эту надпись здесь
Когда уже ПГМ к списку грехов добавят?
Действительно, пора давно уже запретить новости, расхвастались тут налево и направо.
Нежелание думать мозгом — тоже.
жаль нет завета на минусовании кармы о заветах
Чертовски ненавижу религиозных притворных людей, пока они пытаются втюхать свои представления о морали и грехах.
выискивать соринку в глазе другого — тоже ;)
Я повторюсь: мне был интересен этот баг, поскольку он был очень нестандартным: стоило поменять порядок аргументов у f() и всё работает. Стоит объявить f() до вызова и всё работает. Баг редкий и напорись на него кто-нибудь другой искали бы его в PHP коде несколько недель.

Хотя да, багов тысячи. Однако интересных не так много, и наверное не стоило публиковать её всем: не всем интересно программирование.
Стоило, стоило. Уж всяко лучше, чем всякая политота и «меня опять обидели в %название_компании%».
НЛО прилетело и опубликовало эту надпись здесь
Напротив. Хабр изначально был ресурсом технической направленности. То, что в последнее время он медленно, но верно тонет в массе новостных, политических, социальных и псевдофилософских статей, генерирумых людьми, которые не могут не писать, хотя писать им не о чем — это ещё не повод прекращать писать технические статьи.
НЛО прилетело и опубликовало эту надпись здесь
О боже… Ещё бы написал «Хабр уже не тот». Я и сам айтишник, но нет ничего плохого в том, что ресурс растёт. От этого технических статей меньше не становится. Не нравится топик — пройди мимо, слава богу их сейчас предостаточно.
Проходите мимо-проходите мимо… В том что и дело что не хотелось бы что бы проходили мимо.

У меня вот есть друг который на хабр не заходит именно потому что, цитирую: «да чо там читать, на лоре и то больше интересного пишут, один пиар сайтов и ничего интересного для айтишника.».

Статей меньше становится только потому что авторы перестали писать о технических вещах и начали писать на другие, более популярные темы.
НЛО прилетело и опубликовало эту надпись здесь
Можете проинициализировать переменную ($var = 't');, результат будет тот же. Если проинициализировать ещё и $t, то бага исчезнет.
Хотя публиковать разборы старых и сложных багов идея интересная. Особенно очень глубокие (вплоть до физики) баги, как например известный баг с перезагрузкой бортовых компьютеров.
про «глубокие (до физики)...» вспоминается олдскульный спор «куда растёт память: вверх по чипу или вниз?» =;-)
хотя это ближе к проблемам оптимизации
Какой известный баг?
Вроде бы деление на ноль при пересечении самолётом линии моря. Ссылку найти, к несчастью, не могу.
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Держите награду

Спасибо :-)
Еще бы старые баги не вытаскивали бы, а то переодически бывает, на моей памяти яркий релиз 5.2.0, когда перестали работать параметры переданные по ссылке, все передавалось по значению.
PHP довольно сложно изнутри устроен: опять же Zend, байткод. Потому в нём и бывают такие глюки: очень много оптимизаций.
Мир стал немного лучше. ) Спасибо!
На php настолько плохо с отладкой, что вы топики про ловлю бага будете клепать? Не верю. Смешно.
Ещё раз: на тот момент код компилятора/VM PHP я видел впервые. Потому так сложно искалось.

С отладкой действительно есть проблемы: я не нашёл вот так сразу способа распечатать байткод. Если знаете такой — подскажите.
НЛО прилетело и опубликовало эту надпись здесь
После долгих мыканий и частичной прогонки отладчиком сделал следующее: Добавил в тело zend_fetch_var.* вызов fprintf(stderr, "%s\n", __func__); (там используется кодогенерация), потом посмотрел вывод, по нему нашёл место в сгенерированном коде. Добавил распечатку значения указателя на эту переменную и указателя EG(uninitialized_zval_ptr), заметил что после входа и до return'а значение меняется. Отладчиком ещё раз посмотрел: единственное место где оно могло меняться был тот вызов SEPARATE_ZVAL_TO_MAKE_IS_REF.

Не факт, что патч абсолютно правильный (возможно, нужно всё таки делать IS_REF, тогда сначала надо создать ptr_ptr), но место ошибки найдено верно.
НЛО прилетело и опубликовало эту надпись здесь
Автором проделана весьма серьезная работа, учитывая объем исходников PHP, и их сложность. Это не может не вызывать уважение! Потрясающий труд.
Заминусуйте плз, этот линк не нужен.
спасибо
НЛО прилетело и опубликовало эту надпись здесь
Эх, самую полезную «фичу» убрали.
НЛО прилетело и опубликовало эту надпись здесь
Дело не только именно в такой конструкции.
В теме habrahabr.ru/blogs/php/95595/ описаны еще несколько конструкций, с которыми может столкнуться программист.
Отлично! Спасибо!
Всё оказалось ещё немного более интересным: баг наступал только если в порядковом номере аргумента был установлен второй бит.

Поэтому мой патч оказался не верным, однако баг был найден правильно. Интересно, помогло ли это майнтейнеру бага.
В своё оправдание могу сказать, что никогда бы не ожидал того, что флаг будет равен 2, а не маске на более высоких битах.
UPD: Баг был потому, что ошибочно опознавался номер аргумента как специальный флаг, который должен делать переменную REF'ом, что и ошибочно делалось. В остальном всё правильно.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации