From acba9e5bd3d9e21be2b8950ea1806883e988e95a Mon Sep 17 00:00:00 2001 From: Carsten Brandt Date: Fri, 17 Oct 2014 15:33:07 +0200 Subject: [PATCH] fix crash when setter w/o arguments is defined fixes #5623 --- extensions/apidoc/CHANGELOG.md | 2 +- extensions/apidoc/models/Context.php | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/extensions/apidoc/CHANGELOG.md b/extensions/apidoc/CHANGELOG.md index 2ba0d7e..07e5702 100644 --- a/extensions/apidoc/CHANGELOG.md +++ b/extensions/apidoc/CHANGELOG.md @@ -4,7 +4,7 @@ Yii Framework 2 apidoc extension Change Log 2.0.1 under development ----------------------- -- no changes in this release. +- Bug #5623: Fixed crash when a class contains a setter that has no arguments e.g. `setXyz()` (cebe) 2.0.0 October 12, 2014 diff --git a/extensions/apidoc/models/Context.php b/extensions/apidoc/models/Context.php index 92f7269..fe28c58 100644 --- a/extensions/apidoc/models/Context.php +++ b/extensions/apidoc/models/Context.php @@ -271,7 +271,7 @@ class Context extends Component if ($method->isStatic) { continue; } - if (!strncmp($name, 'get', 3) && strlen($name) > 3 && $this->paramsOptional($method)) { + if (!strncmp($name, 'get', 3) && strlen($name) > 3 && $this->hasNonOptionalParams($method)) { $propertyName = '$' . lcfirst(substr($method->name, 3)); if (isset($class->properties[$propertyName])) { $property = $class->properties[$propertyName]; @@ -299,7 +299,7 @@ class Context extends Component ]); } } - if (!strncmp($name, 'set', 3) && strlen($name) > 3 && $this->paramsOptional($method, 1)) { + if (!strncmp($name, 'set', 3) && strlen($name) > 3 && $this->hasNonOptionalParams($method, 1)) { $propertyName = '$' . lcfirst(substr($method->name, 3)); if (isset($class->properties[$propertyName])) { $property = $class->properties[$propertyName]; @@ -331,18 +331,20 @@ class Context extends Component } /** + * Check whether a method has `$number` non-optional parameters. * @param MethodDoc $method * @param integer $number number of not optional parameters * @return bool */ - private function paramsOptional($method, $number = 0) + private function hasNonOptionalParams($method, $number = 0) { + $count = 0; foreach ($method->params as $param) { - if (!$param->isOptional && $number-- <= 0) { - return false; + if (!$param->isOptional) { + $count++; } } - return true; + return $count == $number; } /**