Перейти к содержанию
  • записи
    4
  • комментариев
    27
  • просмотров
    260

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


sitecreator

126 просмотров

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

 

 

 

 

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


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

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

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

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

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

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

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

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

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