Не вижу ничего преступного в том что человек похвастал тем, что он реально сделал, что имеет реальную пользу, и что реально не является очень простой задачей, тем более что он сделал это не просто так, а после соот-щего топика.
Я повторюсь: мне был интересен этот баг, поскольку он был очень нестандартным: стоило поменять порядок аргументов у f() и всё работает. Стоит объявить f() до вызова и всё работает. Баг редкий и напорись на него кто-нибудь другой искали бы его в PHP коде несколько недель.
Хотя да, багов тысячи. Однако интересных не так много, и наверное не стоило публиковать её всем: не всем интересно программирование.
Напротив. Хабр изначально был ресурсом технической направленности. То, что в последнее время он медленно, но верно тонет в массе новостных, политических, социальных и псевдофилософских статей, генерирумых людьми, которые не могут не писать, хотя писать им не о чем — это ещё не повод прекращать писать технические статьи.
О боже… Ещё бы написал «Хабр уже не тот». Я и сам айтишник, но нет ничего плохого в том, что ресурс растёт. От этого технических статей меньше не становится. Не нравится топик — пройди мимо, слава богу их сейчас предостаточно.
Проходите мимо-проходите мимо… В том что и дело что не хотелось бы что бы проходили мимо.
У меня вот есть друг который на хабр не заходит именно потому что, цитирую: «да чо там читать, на лоре и то больше интересного пишут, один пиар сайтов и ничего интересного для айтишника.».
Статей меньше становится только потому что авторы перестали писать о технических вещах и начали писать на другие, более популярные темы.
Хотя публиковать разборы старых и сложных багов идея интересная. Особенно очень глубокие (вплоть до физики) баги, как например известный баг с перезагрузкой бортовых компьютеров.
Еще бы старые баги не вытаскивали бы, а то переодически бывает, на моей памяти яркий релиз 5.2.0, когда перестали работать параметры переданные по ссылке, все передавалось по значению.
После долгих мыканий и частичной прогонки отладчиком сделал следующее: Добавил в тело zend_fetch_var.* вызов fprintf(stderr, "%s\n", __func__); (там используется кодогенерация), потом посмотрел вывод, по нему нашёл место в сгенерированном коде. Добавил распечатку значения указателя на эту переменную и указателя EG(uninitialized_zval_ptr), заметил что после входа и до return'а значение меняется. Отладчиком ещё раз посмотрел: единственное место где оно могло меняться был тот вызов SEPARATE_ZVAL_TO_MAKE_IS_REF.
Не факт, что патч абсолютно правильный (возможно, нужно всё таки делать IS_REF, тогда сначала надо создать ptr_ptr), но место ошибки найдено верно.
Дело не только именно в такой конструкции.
В теме habrahabr.ru/blogs/php/95595/ описаны еще несколько конструкций, с которыми может столкнуться программист.
UPD: Баг был потому, что ошибочно опознавался номер аргумента как специальный флаг, который должен делать переменную REF'ом, что и ошибочно делалось. В остальном всё правильно.
Ловля бага #52001 в PHP 5.3: указатели и неициализированные переменные