Баг движка SMF. Правим обрезание заголовков, тем, топиков.

По-работе пришлось исправлять странный баг. Суть была такова: есть некий сайт, работает он на bitrix’е. Сайт крутится на сервере под управлением centOS. В одном из разделов сайта залит форумный движок SMF — типичный такой форум, без особых наворотов.

Так вот работал себе этот форумный движок на этом сервере много лет, а тут что-то произошло и появились странные баги:

  1. Обрезались title у страницы
  2. Обрезались названия тем
  3. Обрезались сами тексты топиков

В общем заказчик негодует. Надо исправлять. Много версий было выдвинуто, много кода просмотрено, и вот какой вывод был сделан: движок активно использует функцию htmlspecialchars — для преобразования некоторых символов в html-сущности (например кавычки и т.д.). Только вот использует он её не обычную, а модифицированную:

$smcFunc['htmlspecialchars'] ();

Модифицирована она разработчиками SMF, и вот что они про неё пишут:  функция похожа на функцию htmlspecialchars (имеется ввиду стандартную), однако она дополнительно проверяет аргументы на кодировку, и делает ещё некоторые вещи.

Как решили проблему:

Ищем данную функцию в файлике Post.php, что находится по адресу: /Sources/Post.php

Ищем там ~1024 строчку, и вот в этом месте:

Меняет на то, что на скриншоте 🙂 Т.е. заменяем кастомизированную функцию на обычную, PHP-ую.

Тоже самое делаем приблизительно в 1615-1617 строках:

Сохраняем, загружаем на сервер и проверяем.

В моём случае работы была восстановлена и заголовки с сообщениями перестали обрезаться. По догадкам и логическим суждениям, проблема была в том, что кастомизированная функция вызывала функции, которые не поддерживались новой версией PHP, которую накатили на сервере.

Ошибка была найдена с горой матов, техдиром, который сидел рядом и испускал эту гору матов и чей-то матери.

P.S.: Заменять всё сразу — не советую. Мы попробовали — форум упал к чертям. Помогла замена исключительно в данных местах.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *