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

- 禁用eval函数中PHP代码段的字面量字符串优化
- 添加noLiteralString属性标记避免优化器错误处理
- 修改编译器基类中字符串解析逻辑以支持条件优化控制
pull/1/head
韩天峰 5 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_types_order' => ['sort_algorithm' => 'none', 'null_adjustment' => 'always_last'],
'phpdoc_separation' => false, 'phpdoc_separation' => false,
'phpdoc_summary' => false, 'phpdoc_summary' => false,
'ordered_class_elements' => true, 'ordered_class_elements' => false,
'ordered_imports' => ['imports_order' => ['class', 'function', 'const'], 'sort_algorithm' => 'alpha'], 'ordered_imports' => ['imports_order' => ['class', 'function', 'const'], 'sort_algorithm' => 'alpha'],
'ordered_types' => ['null_adjustment' => 'always_last', 'sort_algorithm' => 'none'], 'ordered_types' => ['null_adjustment' => 'always_last', 'sort_algorithm' => 'none'],
'single_line_comment_style' => ['comment_types' => []], 'single_line_comment_style' => ['comment_types' => []],

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

Loading…
Cancel
Save