Xcache баг-трекер декомпилятора

Статус
В этой теме нельзя размещать новые ответы.
Наверное куда-то не туда вставил. Проверял вначале с п.1 патчем, затем переделал на UPD
PHP:
$this->page++; // $this->page++;
++$this->n; // ++$this->n;
$this->$vname++; //$this->{vname}++;
По последнему видно, что с $ какая-то недоработка, надеюсь olivok поправит =)
За основу взял последнюю версию

UPD. Это оказался мой косяк, забыл в скобки заключить проверку условия. Теперь все работает без сучка и задоринки
 

Вложения

  • Decompiler.class.php-this-patch-UPD.zip
    17,7 KB · Просмотры: 28
Еще интересный баг с составными переменными:
Дано:
PHP:
//You can even add more Dollar Signs
$Bar = "a";
$Foo = "Bar";
$World = "Foo";
$Hello = "World";
$a = "Hello";

$a; //Returns Hello
$$a; //Returns World
$$$a; //Returns Foo
$$$$a; //Returns Bar
$$$$$a; //Returns a
$$$$$$a; //Returns Hello
$$$$$$$a; //Returns World

//... and so on ...//
на выходе:
PHP:
$Bar = "a";
$Foo = "Bar";
$World = "Foo";
$Hello = "World";
$a = "Hello";
$a;
$a;
$a;
$a;
$a;
$a;
 
BTW откуда echo (echo "\r\n" ) ; появляется ? в этом коде после вашего 13 (ака Decompiler.class13012013-fix-case+shadow) патча dima2k?
PHP:
<?php
  function search($expression, $bnum = -1) {
        $ret = array();
        $this->error = ''; //отбражается
 
          if ($bnum == -1) {
            $sel = $this->get_backend_list('');
            $failed = 0;
            for ($i = 0 ; $i < sizeof($sel) ; $i++) {
                $backend = &$sel[$i];
                $backend->error = '';
                $res = $backend->search($expression);
                if (is_array($res)) {
                    $ret = array_merge($ret, $res);
                } else {
                    $this->error .= "\n" . $backend->error; // только .= 'error';
                    $failed++;
                }
            }
 
 
            if( $failed >= sizeof( $sel ) ) {
                $ret = FALSE;
            }
 
        }  else {
 
 
 
            $this->backends[$bnum]->search($expression); //Тут остановка
            if (!is_array($ret)) {
                $this->error .= "\n" . $this->backends[$bnum]->error; //тут не отображается все с this, только .= 'error'
                $ret = FALSE;
            }
        }
 
        return( $ret );
    }
    ?>
стало
PHP:
                $this->backends[$bnum]->search($expression);
 
                if (!is_array($ret)) {
                        $this->error .= "\n" . $this->backends[$bnum]->error;
                        $ret = false;
                }
        }
 
        return $ret;
}
 
echo "\r\n";
 
?>
понял почему оказывается был сверху пробел перед <?php потому он его так декомпилировал (видимо влияют как то пустые строки на декомпиляцию)
Оставлю то дополнение к патчу по п.1
 
Скрытое содержимое доступно для зарегистрированных пользователей!


Скрытое содержимое доступно для зарегистрированных пользователей!
 
смотри новый архив в 1 посте, Xcache updatable 25012013 or look for new RAR in 1st post Xcache updatable 25012013 also attach files with bugs, ofcourse after updates checks with
 
по последнему дополнению п.1
выход
PHP:
$this++;
++$this;
$this++;

UPD: дополнение к 1 патчу делает такой выход, оно вообще нужно?? (дополнение), его применять только если либо-либо
Только что перепроверил различные варианты использования $this - везде в качестве параметра окода ['op1']['op_type'] передается 8, т.е. XC_IS_UNUSED. Поэтому для фикса всех имеющихся и даже еще не обнаруженых пропаданий $this, достаточно заменить в функции getOpVal
case XC_IS_UNUSED:
return null;
на
case XC_IS_UNUSED:
return '$this';
Это окончательный и самый безболезненный вариант, который позволит избавиться за ненадобностью от уже существующих в файле конструкций, типа isset($op1val) ? $op1val : '$this'.
 
php5.2 UNDEF OP ex: UNDEF OP: 205
 

Вложения

  • member.zip
    14,5 KB · Просмотры: 17
Для просмотра ссылки Войди или Зарегистрируйся
1. Пофикшены $this. Вынесено определение $this в getOpVal (спасибо dima2k за идею)
2. Исправлен глюк unset(ClassName::$classProp); (декодировало как unset($ClassName::$classProp);
 
Еще интересный баг с составными переменными
Исправлено в Для просмотра ссылки Войди или Зарегистрируйся и Для просмотра ссылки Войди или Зарегистрируйся
Теперь проходит
PHP:
<?php
 
list($$a[1]) = array(1);
$$a++;
$$a[0]++;
@$$a++;
while (list($var,) = @each($input)){
  unset($$var);
}
unset($a);
 
$_SESSION["authorized"]="yes";
$$v['ddd'] = 'yes';
$$vr['aa'] = $mm[$e];
$vr['qqq'] = "no";
 
$_SESSION["authorized"];
$a;
$$a;
$$$a;
 
echo $$a->num;
$$a->num = 10;
$$a->num->a = 10;
 
@$m["authorized"];
@$m["authorized"] = 1;
@$$m["authorized"];
@$$m["authorized"] = 1;
@$$$m["authorized"];
$$m = 1;
$$$m = 1;
@$$m;
@$$m = 1;
 
$$$m[$q] = 1;
@$$$m[$v] = 1;
$$$m[$q];
@$$$m[$v];
 
кстати этот 1ночный заработал
PHP:
C:\xcache52>php phpdc.phpr us.php
<?php
 
$v = "{$a}";
$c = $d;
$c = $escape . $hex["{$h2}"] . $hex["{$h1}"];
$r = "{$a} \n\ra{$v}a\ta {$b}\000" . $v . "\$te\\st";
 
?>
 
C:\xcache52>
такой вопрос применительно к 53 какие еще можно извращенные конструкции проверить, а также, думаю прогнать все примерчики еще на 54 и там интересно что нового
такой на 53 вообще ноль, прменительно обработок namespace
PHP:
namespace MyProject;
 
echo '"', __NAMESPACE__, '"'; // выводит "MyProject"
а такой работает, но __NAMESPACE__ нету
PHP:
<?php
namespace MyProject;
 
function get($classname)
{
    $a = __NAMESPACE__ . '\\' . $classname;
    return new $a;
}
?>
[/spoil]
такой тоже не верно обрабатывается
[spoil]
PHP:
<?php
namespace MyProject;
 
use blah\blah as mine; // см. "Использование пространств имен: импорт/создание псевдонима имени"
 
blah\mine(); // вызывает функцию MyProject\blah\mine()
namespace\blah\mine(); // вызывает функцию MyProject\blah\mine()
 
namespace\func(); // вызывает функцию MyProject\func()
namespace\sub\func(); // вызывает функцию MyProject\sub\func()
namespace\cname::method(); // вызывает статический метод "method" класса MyProject\cname
$a = new namespace\sub\cname(); // Создает экземпляр класса MyProject\sub\cname
$b = namespace\CONSTANT; // присваивает значение константы MyProject\CONSTANT переменной $b
?>
Или сперва всеже основные пхп а потом уже мажорные изменения по версиям
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху