Перейти к содержанию
  • записи
    4
  • комментария
    34
  • просмотров
    1 049

Ioncube loader 12 и баги, которые он уже принес. Веселье впереди!


sitecreator

817 просмотров

После перехода некоторых хостеров на 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-й версии:

 

9dQ53mv.jpeg

 

смотрим в браузере в "исходный код".

php + ионкуб превратили пустую строку в последовательность шестнадцатеричных нулей.

Чудеса? Нет, это баг.

 

Т.е. ионкуб пихает в строки последовательности нулей.

И это даже будет незаметно до поры, до времени. Т.к. браузер даже не чихнет на эти лишние нули, т.к. он их просто не отобразит. И вам будет казаться, что все работает.

Но как только вы такую строку захотите использовать как паттерн для регулярного выражения, то php начинает ругаться на нули, т.к. они, действительно, там появились.  И впихнул их именно ioncube loader 12-й версии по одному ему ведомой прихоти.

И делает он это не закономерно, т.е. в начале кода эта строка будет обработана нормально, например, но в другом месте будут подставлены нули.  Т.е. тут как повезет.

 

Проблема к модулю не имеет никакого отношения.

 

Я даже посмотрел исходник на PHP в hex формате. А не затесался ли там нечитаемый символ?

Нет. Там четко есть пустая строка - это только кавычки, и больше ничего.

 

 

OST9msL.jpeg

 

Думаю, что в лоб это можно попробовать вылечить используя энкодер 12-й.

 

 

 

 

7 Комментариев


Рекомендуемые комментарии

PHP Warning:  [obfuscated](): Null byte in regex in 

 

вот такая ошибка движка PHP появляется при смене ioncube loader на 12-ю версию.

сопровождаться может также 503-й ошибкой сервера и т.д.

на деле нет никаких null byte в regex. Речь про исходный код и про переменные в процессе выполнения. Специально смотрел с отладкой. Чистой воды баг от ионкуба.

 

Если в журнале ошибок опенкарт увидите вышеприведенную ошибку (Null byte in regex), то смотрите версию ионкуба.

через phpinfo(). Ее генерирует именно 12-й ионкуб.

 

blvgT91.jpeg

 

KhgSIOC.jpeg

Версию ioncube loader меняет хостер на общем хостинге. Релиз 12-й ioncube loader стартовал в середине августа 2022-го.

Т.е. пока крайне сырая версия, но некоторые хостеры поспешили уже перейти с 11-й на 12-ю. Хотя обычно дают устаканиться сырому продукту, т.е. дожидаются когда массовые баги отловят в первые несколько месяцев. Месяц-два - это не срок чтобы такого рода продукт перестал быть сырым.

Пользователям VDS автоматический переход на 12-ю не грозит.

 

Не возникает проблем на любой версии PHP от 5.6 до 7.4 включительно с ioncube loader  10-й или 11-й веток.

 

 

Многие хостеры дают возможность выбора версии ioncube loader. Во избежание проблем выбирайте 10-ю или 11-ю версию.

 

По идее компания ioncube старается обеспечить обратную совместимость программ (и энкодеров более ранних версий) со всеми версиями ioncube loader.

Но когда это не получается у компании ioncube , то она предлагает перекодировать программы новым энкодером, т.е. энкодером 12-й версии чтобы не было проблем с ioncube loader 12-й версии.

Так компания ioncube видит работу над устранением багов, порожденных самой же компанией ioncube.

Чтобы устранить баг компания ioncube предлагает купить 12-й энкодер.

Ссылка на комментарий

И все могло бы быть не так страшно, но баг ioncube напоролся на признанный баг самого движка php, который описан здесь:

 

https://bugs.php.net/bug.php?id=77726

 

Т.е. это поведение официально признано багом и известно разработчикам PHP.

 

вот ссылка на фиксы данного бага:

https://github.com/php/php-src/pull/8114

 

 

Но хостеры не спешат ставить обновленную версию PHP, в которой отсутствует данный баг.

 

В принципе этот баг самого PHP и не проявился бы если бы ioncube loader не напихал нам нулевых байтов.

 

вот тест:

 

<?php

preg_match("/a".chr(0)."bc/", 'abc');

 

preg00.php

файл прилагается.

запустите этот файл. Если вы увидите сообщение об ошибке:

 

Warning: preg_match(): Null byte in regex in ...\preg00.php on line 3

 

то это значит, что у вас еще версия PHP с багом.  А хостер не заменил ее на версию без бага.

 

Итого, что имеем?

Удивительный случай когда баг ioncube loader встретился с багом движка PHP.

При совершенно валидном изначальном  коде.

preg00.zip

Ссылка на комментарий

От аномального поведения невозможно избавиться.

удаляем NULL байты, но вместо удаления либо появляются новые, либо удаляются только конечные и начальные.

Чудеса! Точнее, это баги.

 

Пробовал так бороться:

 

$pattern_for_tags = '';

$pattern_for_tags = str_replace("\0", '', $pattern_for_tags);
echo "\nЭто тоже после удаления NULL-ей pattern_for_tags\n";
echo $pattern_for_tags;

$pattern_for_tags = trim($pattern_for_tags);
echo "\nЭто тоже после TRIM pattern_for_tags\n";
echo $pattern_for_tags;

 

Но, как говорится фиг вам.  php с кубом стоят на своем.

 

ADyNWZD.jpeg

 

видимо, без покупки енкодера 12 удивительный баг не побороть.

Хороший маркетинговый ход у разработчиков ионкуба. Создать баг в новом loader-е, для исправления которого нужно купить новый энкодер 12-й версии за $300. И то, если его еще продадут вам. Разработчик то в Англии.

Видать, с продажами энкодера 12-го совсем плохо.

Да и зачем он нужен то?

Поддержки php 8 в нем нет и не будет. А кому нужна поддержка 8.1, собственно, для которой он и сделан?

 

И, не факт, что применение 12-го энкодера позволит решить проблему. Это как лотерея.

Может быть, что это неустранимый баг 12-й версии ioncube loader-а.

Ссылка на комментарий

В настоящий момент с точностью 100% известно, что в ioncube loader 12 присутствует баг.

И вызывает его всего одна строчка абсолютно валидного кода.

Если вы после этой строчки (в любом месте) сделаете код (любые операции с переменными-строками вызывают строки с "нулями"):

 

$x=''; echo $x;

 

то получите вывод тех самых битовых "нулей" вместо пустой строки.

 

Т.е. неработоспособную программу (для теста) достаточно написать из двух-трех строк.

Баг возникает не в движке PHP, а именно в ioncube loader 12, в одной из ее функций, которая в предыдущих версиях (10, 11) работала исправно (т.е. на протяжении 6 лет), но дала сбой в 12-й версии.

 

К сожалению компания ioncube крайне закрыта в плане общения и информации, обсуждения и подтверждения багов и т.д.

Вы даже через поиск не найдете форум самой ioncube , хотя он был раньше, и на нем обсуждались проблемы ioncube .

 

Они просто удалили форум как "ненужный" элемент поддержки пользователей и спокойно сообщили об этом:

 

https://blog.ioncube.com/2022/04/01/what-happened-to-the-forum/

 

А то мало ли что... Станут пользователи публично сообщать на форуме о найденных багах. Раньше писали же. Ну разве это нужно компании?

Ссылка на комментарий

Забавляет сам подход компании ioncube к вопросам  по обнаруженным багам.

Прежде всего если вы сообщите о вашем желании сообщить информацию в поддержку, то вам сначала предложат купить платную поддержку, т.к. поддержка у них всего один год составляет с момента первой покупки. Даже если вы потом покупали "обновление" до новой версии, то поддержка в эту сумму не входит.

 

К примеру, новая версия енкодера 12 стоит $300. Если хотите сэкономить, то можете заплатить $275 при переходе с более старой версии. Но поддержки у вас при этом не будет.

 

Хотите сообщить о баге? А вот попробуйте! Публично не получится (форума то нет теперь), а обращение в поддержку возможно при годовой подписке на эту самую поддержку.

 

А можете и не обращаться в поддержку, а сразу купить 12 энкодер. Это чтобы их же собственный баг побороть. Так они вам посоветуют, но, разумеется, без всяких гарантий.

 

Для своих программ я нашел решение. Проблем более не возникает.

 

Я бы на месте компании ioncube всячески бы благодарил за достоверный баг-репорт о серьезной проблеме и предоставлял бы бесплатное обновление до энкодера 12. Но у данной компании свой взгляд на развитие и улучшение продукта.

Порой, этот взгляд очень вызывает много сомнений.

Чего стоит отказ от создания ioncube для 8.0 версии php.  Они просто пропустили эту версию, решили, что не надо и сразу сделали для 8.1.

Спрашивается, и нафига нужен энкодер/loader, который не поддерживает php 8.0?

Как это можно объяснить пользователям php 8.0?  К примеру, у них работает нормально все на 8.0, а на 8.1 - не очень то. Или просто не желают или не умеют они переключиться на 8.1.

 

Ссылка на комментарий

 

На фоне пока неустраненного бага в ioncube loader 12.0.2     ( релиз от 2022-09-09)

компания ioncube решила поднять цены на энкодеры.

Pro версия вместо $299 стоит теперь $344.

 

На фоне обнаруженного бага неплохой коммерческий ход? Можно пока не спешить с устранением бага в ioncube loader 12, но при этом намекнуть, что баг можно обойти за счет покупки нового энкодера.  Вроде как у разработчиков и выхода другого нет, так почему бы заодно и цену не поднять?

 

Непонятно как некоторые хостеры ухитрились поставить настолько сырой и непроверенный софт?

Куда и зачем они так торопились, что поставили софт, которому меньше месяца с момента самого первого релиза 12-й?

Подождать несколько месяцев до стабильной (исправленной от багов) и проверенной версии никак нельзя было?

Ведь понятно, что в первые месяцы после релиза нового продукта идет отлов тех самых багов.

 

Матерые хостеры, например, никогда не торопятся. Для них важна стабильность и репутация.

 

Я бы еще понял установку ioncube loader 12 для php 8.1, там хотя бы смысл есть. Но для предыдущих версия php нет смысла.

 

C469a8u.jpeg

Ссылка на комментарий

z4hjNfq.jpeg

 

9MStFjV.jpeg

 

Дождались.

ioncube исправили собственную ошибку в лоадере. версия 12.0.4

Они эту ошибку четко признали.

 

лоадеры до (более ранние) версии 12.0.4 (исключая это версию) содержат ошибки.

 

Горе тем хостерам, которые бегут впереди паровоза и спешат ставить сырой софт, не думаю о своих пользователях. Зачем спешили?

Опытные хостеры всегда выдержат паузу в несколько месяцев когда в сыром продукте отловят большинство багов, и опытные хостеры не превращают свой хостинг в площадку для экспериментов и вылавливания багов.

 

Да, ошибка именно в лоадере, т.е. покупка нового ioncube энкодера и перекодирование кода проблему никак не решили бы.

Ссылка на комментарий
Гость
Добавить комментарий...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...