Exiting with 1 when Exception::getCode() returns non-integer values.

From php.net/exception.getcode
> Returns the exception code as integer in Exception but possibly as other type in Exception descendants (for example as string in PDOException).
This commit is contained in:
Renan Gonçalves 2014-06-26 13:12:28 +02:00
parent e8ee25f40d
commit 1a89a3cb9d
2 changed files with 30 additions and 1 deletions

View file

@ -58,7 +58,9 @@ class ConsoleErrorHandler {
$exception->getMessage(), $exception->getMessage(),
$exception->getTraceAsString() $exception->getTraceAsString()
)); ));
return $this->_stop($exception->getCode() ? $exception->getCode() : 1); $code = $exception->getCode();
$code = ($code && is_integer($code)) ? $code : 1;
return $this->_stop($code);
} }
/** /**

View file

@ -147,4 +147,31 @@ class ConsoleErrorHandlerTest extends CakeTestCase {
$this->Error->handleException($exception); $this->Error->handleException($exception);
} }
/**
* test a exception with non-integer code
*
* @return void
*/
public function testNonIntegerExceptionCode() {
if (PHP_VERSION_ID < 50300) {
$this->markTestSkipped('ReflectionProperty::setAccessible() is available since 5.3');
}
$exception = new Exception('Non-integer exception code');
$class = new ReflectionClass('Exception');
$property = $class->getProperty('code');
$property->setAccessible(true);
$property->setValue($exception, '42S22');
ConsoleErrorHandler::$stderr->expects($this->once())->method('write')
->with($this->stringContains('Non-integer exception code'));
$this->Error->expects($this->once())
->method('_stop')
->with(1);
$this->Error->handleException($exception);
}
} }