Pull to refresh

Comments 52

UFO just landed and posted this here
vim, gcc, gdb, палкой-копалкой.

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

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

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

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

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

Статей меньше становится только потому что авторы перестали писать о технических вещах и начали писать на другие, более популярные темы.
UFO just landed and posted this here
Можете проинициализировать переменную ($var = 't');, результат будет тот же. Если проинициализировать ещё и $t, то бага исчезнет.
Хотя публиковать разборы старых и сложных багов идея интересная. Особенно очень глубокие (вплоть до физики) баги, как например известный баг с перезагрузкой бортовых компьютеров.
про «глубокие (до физики)...» вспоминается олдскульный спор «куда растёт память: вверх по чипу или вниз?» =;-)
хотя это ближе к проблемам оптимизации
Какой известный баг?
Вроде бы деление на ноль при пересечении самолётом линии моря. Ссылку найти, к несчастью, не могу.
UFO just landed and posted this here
UFO just landed and posted this here
Еще бы старые баги не вытаскивали бы, а то переодически бывает, на моей памяти яркий релиз 5.2.0, когда перестали работать параметры переданные по ссылке, все передавалось по значению.
PHP довольно сложно изнутри устроен: опять же Zend, байткод. Потому в нём и бывают такие глюки: очень много оптимизаций.
Мир стал немного лучше. ) Спасибо!
На php настолько плохо с отладкой, что вы топики про ловлю бага будете клепать? Не верю. Смешно.
Ещё раз: на тот момент код компилятора/VM PHP я видел впервые. Потому так сложно искалось.

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

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

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

Articles