Аналитика Telegram-канала
Подписчики
174
Охват за 24 ч
11
ER за 24 ч
6,32%
Публикаций
77
Динамика подписчиков
7 дней
30 дней
6 месяцев
Больше
25 окт28 окт31 окт
Показаны последние 7 дней
Больше истории →
Охваты публикаций
02.1006.1014.1014.1030.10
9
Средний охват
11
Лучший результат
Показаны 5 публикаций — последние в канале
Больше статистики →
Упоминания
4
Упоминаний
2
Из них репостов
3
Каналов
2
Упоминаний
0
Из них репостов
2
Каналов
Последние посты
3 из 77 2 из 77Отшумели летние дожди новости про уязвимости php. Осталось выяснить, а что со всем этим делать. Ну понятно, что обновиться, там где можно. А где нельзя?
Вот у меня тут 15летнее легаси. Называется Drupal 6. Официально работает на php 5.6. И оно бы у нас так и работало, но с технологиями прошлого десятилетия всегда то нога разуется, то пизда раздуется. То pecl отвалится, то еще кака хуйня. Года 2 назад перестал работать драйвер с новой версией mysql. В итоге,был сделан прорывной скачок, и после применения неофициального патча, версию подняли до 7.2.
Так бы оно все и работало, если бы не события прошлой недели. Можно конечно забить, и надеяться на лучшее. Но ощущение, что это не последние уязвимости, и дальше лучше не будет. А в случае взлома, напихают мне🍆
Можно подумать, что раз у меня уже друпал 6, то там и так дыра на дыре. И для меня эти уязвимости, это как извержение вулкана на залупе таракана. И даже если их пофиксить, то дырявый друпал никуда не денется.
но-но! попрошу! сам фронтенд друпала уже давно скрыт за семью печатями, и доступен только из интра сети. А наружу торчат только отдельные ендпоинты, логика которых зиждется на куче кастомного легаси. От друпала там только ядро и ебучая структура данных. Короче говоря, было сделано если и не все, то очень многое, чтоб этого покойника оживить.
Поэтому было принято волевое решение попробовать таки заставить это все поработать на 8.2. Скажем, года 2 назад я бы ни за что не взялся за такую задачу. Но раз ИИ эту кашу всю заварил, то можно его поиспользовать и в благих целях.
У нас есть:
Claude Opus 5.5
Конечно же Rector
И довольно приличный набор e2e тестов (вот это вообще ключевое)
Первым делом я попросил клод сгенерить набор рулзов ректора для апгрейда с 7.2 на 8.2. Не сразу все получилось правильно, но в итоге получилось вот так. И я в который раз хочу отметить охуенность тулинга в пыхе. То, что rector существует – это просто гейм ченджер. Трудно представить, сколько бы возился агент с такой задачей, если просто работал с кодом. А тут он работает на другом уровне, на уровне правил ректора.
Но и без клода я бы честно заебся собирать правила вот здесь. Хотя выглядит в целом реальным.
Конечно же нихуя не заработало просто так. Выяснилось, что парсер phpstan (именно он используется под капотом ректора) ломается на некотором коде на свежей версии пхп. В частности подзаебали фигурные скобки вместо квадратных, как способ доступа к элементам строк и массивов. Надо было либо прогонять на старой версии, либо сначала отдельно фиксить это.
Также процесс пришлось разделить на сам друпал с кастомным кодом, и отдельно на обновление third-party билиотек, которые лежали также в репе, и в которых было стоооолько говна, что даже друпал кажется свежатиной. Например порадовала билиотека PHPExcel (2012 год). Там просто best practices php 4 💪️️️️️️
Ректор конечно же не решил все проблемы. В частности api пыхи в некоторых местах поменялось так, что все падало сразу. Конкретные примеры:
error handler (который в set_error_handler) больше не принимает 5-й аргумент
колбэки для управления сессиями ождают результаты конкретного типа (чаще всего бул)
Иногда оно сразу не падало, но явно требовало вмешательства. Например, это касалось новых уровней ошибок и изменения в поведении error suppression (оператор @).
Ну и конечно после того, когда все запустилось формально, код от этого не стал типобезопасным. Он остался таким же говяным. Просто кучу ошибок приготовились ловить в рантайме. И когда запустили тесты, то упало все, что только могло упасть.
Личный топ рантаймовых фаталок:
обращение к свойству null
обращение к элементу массива, когда там нет массива
конвертация массива в с троку (раньше получали слово Array, и никто из пользователей не жаловался)
аргументы implode в неправильном порядке
array_key_exists на объекте
И многое-многое другое!
После изменений просил клод отревьюить код. И он реально помогал находить корнер кейсы. Тут как ни крути, а агент могет. Но даже это не всегда помогало. Вот вам конкретный пример.
Был такой код в фукции валидации формы
if ($elements['#required'] &&
(!count($elements['#value']) ||
(is_string($elements['#value']) &&
strlen(trim($elements['#value'])) == 0))) {
form_error();
}
При прокликивании в админке все упало с ошибкой про вызов count на не Countable|array. Ну понятно, пытаемся посчитать то, что считать нельзя.
Недолго думая, меняю !count($elements['#value'] на empty($elements['#value']). Клод справедливо замечает на ревью, что здесь ошибка. Ведь empty вернет true для строки '0' (блять охуеть конечно это говно!!!😡️️️️️️). И предлагает фикс is_array($elements['#value']) && empty($elements['#value']). И тут уже наступает мой черед нанести удар клоду по самолюбию, ведь тогда проверка пропустит null. В итоге сошлись на
if ($elements['#required'] &&
(!isset($elements['#value']) || (is_array($elements['#value']) && empty($elements['#value'])) ||
(is_string($elements['#value']) &&
strlen(trim($elements['#value'])) == 0))) {
form_error();
}
Кароче, это ахуительный был атракцион! 🎪 Я никогда еще не вписывался в подобный блудняк.
Сейчас конец недели, и я чувствую себя примерно так
Вот так я себя чувствую.
Все тесты проходят. Но впереди еще много работы и куча ручного тестирования. Однако похоже основное тестирование будет на проде! Ссыкотно писос.
ещё
11
0
2 1 30 окт, 17:01
4
ещё
1
0
14 окт, 11:26
рандомный коммент на ютубе, и я горю сракой😡️️️️️️даже дизлайк ебанул, вот на столько выбесился
ещё
9
0
1 14 окт, 11:03
Продолжить анализ этого канала
- История роста подписчиков
- Просмотры и охваты публикаций
- Кто упоминает канал и кого упоминает он
- Похожие каналы и подбор для рекламы
Открыть аналитику
Демо до 14 дней