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

Статус
В этой теме нельзя размещать новые ответы.
И не только, я вот себе записал
Для просмотра ссылки Войди или Зарегистрируйся
1-2 похоже схожая природа
3 - не баг
4 - то еще западло (
 
И не только, я вот себе записал
Для просмотра ссылки Войди или Зарегистрируйся
Проверил на ранних версиях файла - 1-2 и аналогичные определялись нормально, скорее всего фиксы list() привели к такому результату

Интересный баг:
было
@chmod($config["pathes"]["user_data"].$folder,0777);
стало
@chmod($config["pathes"]["user_data"] . $folder, 511);
По спецификации нужно использовать восьмиричную систему. Проверил - работает.
 
1. Исправлен баг ошибочного двойного разименования _SESSION["authorized"]="yes"; (распозновался как $$_SESSION["authorized"]="yes";) - Для просмотра ссылки Войди или Зарегистрируйся
2. Исправлен баг при разборе $login = $_REQUEST["login"]; (распознавались как list() = $_REQUEST; - Для просмотра ссылки Войди или Зарегистрируйся
3. Исправлено двоение switch - Для просмотра ссылки Войди или Зарегистрируйся
 
upd. Починил рекурсию и связывание списков по отношению к переменной - Для просмотра ссылки Войди или Зарегистрируйся. Но теперь опять надо логику list() править, но теперь можно собрать все в цепочки, без разбивки на несколько строк, временно закомментил часть кода в целях совместимости )
 
кстати нашол тот большой закодированный файл в открытом виде насамом деле он весит чуть больше мегабайта, прирост по гардиану в весе условно 8 раз
вот что на нем выдал

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 50 bytes) in C:\Xcache\Decompiler.class.php on line 2846

нашол решение увеличением
memory_limit = 256M в php.ini
а также, немного поприбавил ини кеша в php.ini
;; this is an example, it won't work unless properly configured into php.ini
[xcache-common]
;; WARNING: zend_extension* = *xcache* MUST be the first(above) of all zend_extension*=*
;; using extension=xcache.so is not recommended


zend_extension = c:/xcache/loader/php_xcache.dll

[xcache.admin]
xcache.admin.enable_auth = On
xcache.admin.user = "mOo"
; set xcache.admin.pass = md5($your_password)
; login use $your_password
xcache.admin.pass = ""

[xcache]
; ini only settings, all the values here is default unless explained

; select low level shm/allocator scheme implemenation
xcache.shm_scheme = "mmap"
; to disable: xcache.size=0
; to enable : xcache.size=64M etc (any size > 0) and your system mmap allows
xcache.size = 256M
; set to cpu count (cat /proc/cpuinfo |grep -c processor)
xcache.count = 1
; just a hash hints, you can always store count(items) > slots
xcache.slots = 16K
; ttl of the cache item, 0=forever
xcache.ttl = 0
; interval of gc scanning expired items, 0=no scan, other values is in seconds
xcache.gc_interval = 0

; same as aboves but for variable cache
xcache.var_size = 128M
xcache.var_count = 1
xcache.var_slots = 16K
; default value for $ttl parameter of xcache_*() functions
xcache.var_ttl = 0
; hard limit ttl that cannot be exceed by xcache_*() functions. 0=unlimited
xcache.var_maxttl = 0
xcache.var_gc_interval = 0

; N/A for /dev/zero
xcache.readonly_protection = Off
; for *nix, xcache.mmap_path is a file path, not directory. (auto create/overwrite)
; Use something like "/tmp/xcache" instead of "/dev/*" if you want to turn on ReadonlyProtection
; different process group of php won't share the same /tmp/xcache
; for win32, xcache.mmap_path=anonymous map name, not file path
xcache.mmap_path = "/dev/zero"


; leave it blank(disabled) or "/tmp/phpcore/"
; make sure it's writable by php (open_basedir is not checked)
xcache.coredump_directory = ""

; enable experimental documented features for each release if available
xcache.experimental = Off

; per request settings. can ini_set, .htaccess etc
xcache.cacher = On
xcache.stat = On
xcache.optimizer = Off

[xcache.coverager]
; enabling this feature will impact performance
; enable only if xcache.coverager == On && xcache.coveragedump_directory == "non-empty-value"

; per request settings. can ini_set, .htaccess etc
; enable coverage data collecting and xcache_coverager_start/stop/get/clean() functions
xcache.coverager = Off

; set in php ini file only
; make sure it's readable (open_basedir is checked) by coverage viewer script
xcache.coveragedump_directory = ""
 

Вложения

  • BIGG.rar
    210,3 KB · Просмотры: 42
я сделал поболее (memory_limit = 512M), тоже раскодировал
 
Новые баги:
1. Теряет $this в "$this->page++;" - выход "->page++;", в "++$this->n;", выход "$obj_id = ++->n;", "$this->$vname++;" --> "->{$vname}++;"
2. Ошибка разбора $colors = @file($file) or die("Cannot load spot colors file - ".$file);
Выход - exit("Cannot load spot colors file - " . $file); ($colors = @file($file)) || true;
3. Вставляет {} даже если в переменной класса идет другая переменная, а не составная "$this->$vname" => "$this->{$vname}"
 
П.1 Было
PHP:
case XC_PRE_INC_OBJ: // {{{
$flags = array_flip(explode('_', $opname));
if (isset($flags['OBJ'])) {
$resvar = $this->getOpVal($op1, $EX) . '->' . unquoteVariableName($this->getOpVal($op2, $EX), $EX);
}
else {
  $resvar = $this->getOpVal($op1, $EX);
}
[/spoil]
Станет:
[spoil]
PHP:
case XC_PRE_INC_OBJ: // {{{
$flags = array_flip(explode('_', $opname));
$op1val = $this->getOpVal($op1, $EX);
if (isset($flags['OBJ'])) {
$resvar = isset($op1val) ? $op1val : '$this' . '->' . unquoteVariableName($this->getOpVal($op2, $EX), $EX);
}
else {
$resvar = isset($op1val) ? $op1val : '$this';
}
По 2.му пункту есть рабочий патч. Если до вечера дотерпите, то выложу =)

UPD: Насчет 1-го пункта, чтобы не плодить сущности if(!isset()) в различных опкодах помоему достаточно будет в функцию getOpVal внести изменения:
PHP:
case XC_IS_CV:
$var = $op['var'];
$var = $EX['op_array']['vars'][$var];
return '$' . (isset($var['name']) ? $var['name'] : 'this');
 
case XC_IS_UNUSED:
return '$this';
// return NULL;
 
С составными переменными вообще куча багов:
PHP:
${"var1{$varname}"} = '1'; // $"thivar1{varname}" = "1";

${"foo$one"} = '2'; // $"thifoo{one}" = "2";

${'foo' . ONE} = '3'; // $"foo" . ONE = "3";

${'foo' . one()} = '4'; //$"foo" . one() = "4";

$output = $controller->{$controller->action}($this->params); // output = controller->controller->action($this->params);
$output = $controller->$controller->action($this->params); // output = controller->{controller}->action($this->params);
 
по последнему дополнению п.1
выход
PHP:
$this++;
++$this;
$this++;

UPD: дополнение к 1 патчу делает такой выход, оно вообще нужно?? (дополнение), его применять только если либо-либо
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху