Merge pull request #901 from loilo/fix-default-param-values

Prevent generation of invalid code for certain parameter default values
This commit is contained in:
Barry vd. Heuvel
2020-04-21 21:35:11 +02:00
committed by GitHub
2 changed files with 21 additions and 1 deletions
+1 -1
View File
@@ -329,7 +329,7 @@ class Method
} elseif (is_resource($default)) { } elseif (is_resource($default)) {
//skip to not fail //skip to not fail
} else { } else {
$default = "'" . trim($default) . "'"; $default = var_export($default, true);
} }
$paramStr .= " = $default"; $paramStr .= " = $default";
} }
+20
View File
@@ -47,6 +47,21 @@ class ExampleTest extends TestCase
$this->assertEquals(['$last', '$first = \'Barry\'', '...$middle'], $method->getParamsWithDefault(false)); $this->assertEquals(['$last', '$first = \'Barry\'', '...$middle'], $method->getParamsWithDefault(false));
$this->assertEquals(true, $method->shouldReturn()); $this->assertEquals(true, $method->shouldReturn());
} }
/**
* Test special characters in methods default values
*/
public function testDefaultSpecialChars()
{
$reflectionClass = new \ReflectionClass(ExampleClass::class);
$reflectionMethod = $reflectionClass->getMethod('setSpecialChars');
$method = new Method($reflectionMethod, 'Example', $reflectionClass);
$this->assertEquals('$chars', $method->getParams(true));
$this->assertEquals(['$chars'], $method->getParams(false));
$this->assertEquals('$chars = \'$\\\'\\\\\'', $method->getParamsWithDefault(true));
$this->assertEquals(['$chars = \'$\\\'\\\\\''], $method->getParamsWithDefault(false));
}
} }
class ExampleClass class ExampleClass
@@ -60,4 +75,9 @@ class ExampleClass
{ {
return; return;
} }
public function setSpecialChars($chars = "\$'\\")
{
return;
}
} }