fix(php): 修复字符串字面量优化导致eval函数执行异常

- 禁用eval函数中PHP代码段的字面量字符串优化
- 添加noLiteralString属性标记避免优化器错误处理
- 修改编译器基类中字符串解析逻辑以支持条件优化控制
pull/1/head
韩天峰 4 months ago
parent 88693dcc21
commit b8897319cb
  1. 2
      .php-cs-fixer.dist.php
  2. 4
      src/Php/CompilerBase.php

@ -47,7 +47,7 @@ return (new PhpCsFixer\Config())
'phpdoc_types_order' => ['sort_algorithm' => 'none', 'null_adjustment' => 'always_last'],
'phpdoc_separation' => false,
'phpdoc_summary' => false,
'ordered_class_elements' => true,
'ordered_class_elements' => false,
'ordered_imports' => ['imports_order' => ['class', 'function', 'const'], 'sort_algorithm' => 'alpha'],
'ordered_types' => ['null_adjustment' => 'always_last', 'sort_algorithm' => 'none'],
'single_line_comment_style' => ['comment_types' => []],

@ -902,7 +902,7 @@ class CompilerBase extends \PhpAot\Core\Translator
case 'Scalar_Float':
return $this->parseScalarFloat($expr);
case 'Scalar_String':
return $this->getLiteralString($expr->value);
return $expr->hasAttribute('noLiteralString') ? $this->genCharPtr($expr->value) : $this->getLiteralString($expr->value);
default:
abort($expr);
}
@ -3549,6 +3549,8 @@ class CompilerBase extends \PhpAot\Core\Translator
protected function parseEval(Expr\Eval_ $expr): string
{
// 对 eval() 指令的 PHP 代码段禁止字面量优化
$expr->expr->setAttribute('noLiteralString', true);
return 'php::eval(' . $this->parseIdentifier($expr->expr) . ')';
}

Loading…
Cancel
Save