Ioncube loader 12 и баги, которые он уже принес. Веселье впереди!
После перехода некоторых хостеров на Ioncube loader 12 с 10-й или 11-й версии начали появляться чудеса в виде ошибок, которых никогда не было ранее, А именно:
PHP Warning: [obfuscated](): Null byte in regex in
При том, что код абсолютно валидный. И никаких проблем на 10-й или 11-й версии ioncube loader не возникало на любой версии php от 5.6. до 7.4.
Откуда же взялись нулевые байты в regex?
Программистам может быть интересно.
Исходный код:
$pattern_for_tags = ''; echo "\nЭто тоже 000 pattern_for_tags\n"; echo $pattern_for_tags;
элементарнейший код.
Присвоили переменной пустую строку. И сразу же вывели ее. Ожидали, что будет выведена пустая строка. Т.е. на выходе не будет ничего.
а вот, что имеем на выходе с ioncube loader 12-й версии:
смотрим в браузере в "исходный код".
php + ионкуб превратили пустую строку в последовательность шестнадцатеричных нулей.
Чудеса? Нет, это баг.
Т.е. ионкуб пихает в строки последовательности нулей.
И это даже будет незаметно до поры, до времени. Т.к. браузер даже не чихнет на эти лишние нули, т.к. он их просто не отобразит. И вам будет казаться, что все работает.
Но как только вы такую строку захотите использовать как паттерн для регулярного выражения, то php начинает ругаться на нули, т.к. они, действительно, там появились. И впихнул их именно ioncube loader 12-й версии по одному ему ведомой прихоти.
И делает он это не закономерно, т.е. в начале кода эта строка будет обработана нормально, например, но в другом месте будут подставлены нули. Т.е. тут как повезет.
Проблема к модулю не имеет никакого отношения.
Я даже посмотрел исходник на PHP в hex формате. А не затесался ли там нечитаемый символ?
Нет. Там четко есть пустая строка - это только кавычки, и больше ничего.
Думаю, что в лоб это можно попробовать вылечить используя энкодер 12-й.
7 Comments
Recommended Comments