Compare commits

...

25 Commits

Author SHA1 Message Date
Nicolas Grekas
ef0abb7ca3 Merge branch '3.4' into 4.0
* 3.4:
  revert #27545
  Update Finder.php
  [FrameworkBundle] remove dead code in CachePoolClearerPass
  Fix security-core cross-dependencies, fixes #27507
  Pass previous exception to FatalErrorException
2018-06-08 11:39:19 +02:00
Nicolas Grekas
a7e8068943 Merge branch '2.8' into 3.4
* 2.8:
  revert #27545
  Update Finder.php
  Fix security-core cross-dependencies, fixes #27507
  Pass previous exception to FatalErrorException
2018-06-08 11:38:38 +02:00
Pascal Montoya
5d48e9c0f8 Pass previous exception to FatalErrorException 2018-06-06 10:34:52 +02:00
Nicolas Grekas
b28fd73fef bug #27281 [HttpKernel] Fix dealing with self/parent in ArgumentMetadataFactory (fabpot)
This PR was merged into the 3.4 branch.

Discussion
----------

[HttpKernel] Fix dealing with self/parent in ArgumentMetadataFactory

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | -
| License       | MIT
| Doc PR        | -

Applies CS fixes that where merged on 4.0 to 3.4, embeds a fix in ArgumentMetadataFactory, which couldn't deal with self/parent type hints.

Commits
-------

ba5cb1a245 fixed CS
2018-05-16 16:03:39 +02:00
Fabien Potencier
c7d48cc12e fixed CS 2018-05-16 14:49:49 +02:00
Nicolas Grekas
4e7c98de67 Merge branch '3.4' into 4.0
* 3.4:
  fix merge
  [Security] Fix logout
  Cleanup 2 tests for the HttpException classes
  #27250 limiting GET_LOCK key up to 64 char due to changes in MySQL 5.7.5 and later
  [Config] Fix tests when path contains UTF chars
  [DI] Shared services should not be inlined in non-shared ones
  [Profiler] Remove propel & event_listener_loading category identifiers
  [Filesystem] Fix usages of error_get_last()
  [Cache][Lock] Fix usages of error_get_last()
  [Debug] Fix populating error_get_last() for handled silent errors
  [DI] Display previous error messages when throwing unused bindings
  Suppress warnings when open_basedir is non-empty
2018-05-16 11:05:32 +02:00
Nicolas Grekas
63299f103f Merge branch '2.8' into 3.4
* 2.8:
  [Security] Fix logout
  #27250 limiting GET_LOCK key up to 64 char due to changes in MySQL 5.7.5 and later
  [Profiler] Remove propel & event_listener_loading category identifiers
  [Filesystem] Fix usages of error_get_last()
  [Debug] Fix populating error_get_last() for handled silent errors
  Suppress warnings when open_basedir is non-empty
2018-05-16 10:49:21 +02:00
Nicolas Grekas
fe8838e11c Merge branch '2.7' into 2.8
* 2.7:
  [Security] Fix logout
  #27250 limiting GET_LOCK key up to 64 char due to changes in MySQL 5.7.5 and later
  [Profiler] Remove propel & event_listener_loading category identifiers
  [Filesystem] Fix usages of error_get_last()
  [Debug] Fix populating error_get_last() for handled silent errors
  Suppress warnings when open_basedir is non-empty
2018-05-15 23:17:45 +02:00
Nicolas Grekas
fc4afe37fd [Debug] Fix populating error_get_last() for handled silent errors 2018-05-11 10:00:11 -07:00
Fabien Potencier
4afe1548f3 fixed CS 2018-05-11 17:58:37 +02:00
Nicolas Grekas
e1d57cdb35 Merge branch '3.4' into 4.0
* 3.4:
  [Debug][WebProfilerBundle] Fix setting file link format
  [Debug] Fixed the formatPath when a custom fileLinkFormat is defined
2018-04-30 09:59:37 -07:00
Grégoire Pineau
1b95888cfd [Debug] Fixed the formatPath when a custom fileLinkFormat is defined 2018-04-30 09:53:52 -07:00
Fabien Potencier
5961d02d48 Merge branch '3.4' into 4.0
* 3.4:
  [Yaml] Fix regression when trying to parse multiline
  Add PHPDbg support to HTTP components
  bumped Symfony version to 2.8.38
  updated VERSION for 2.8.37
  updated CHANGELOG for 2.8.37
  bumped Symfony version to 2.7.45
  updated VERSION for 2.7.44
  update CONTRIBUTORS for 2.7.44
  updated CHANGELOG for 2.7.44
  Fix check of color support on Windows
2018-04-03 07:24:00 +02:00
Fabien Potencier
9cf7c2271c Merge branch '2.8' into 3.4
* 2.8:
  Add PHPDbg support to HTTP components
  bumped Symfony version to 2.8.38
  updated VERSION for 2.8.37
  updated CHANGELOG for 2.8.37
  bumped Symfony version to 2.7.45
  updated VERSION for 2.7.44
  update CONTRIBUTORS for 2.7.44
  updated CHANGELOG for 2.7.44
  Fix check of color support on Windows
2018-04-03 07:22:50 +02:00
Fabien Potencier
4486d2be5e Merge branch '2.7' into 2.8
* 2.7:
  Add PHPDbg support to HTTP components
  bumped Symfony version to 2.7.45
  updated VERSION for 2.7.44
  update CONTRIBUTORS for 2.7.44
  updated CHANGELOG for 2.7.44
  Fix check of color support on Windows
2018-04-03 07:20:27 +02:00
Haralan Dobrev
e191af723b Add PHPDbg support to HTTP components 2018-04-03 07:05:54 +02:00
Nicolas Grekas
af3b794316 Merge branch '3.4' into 4.0
* 3.4: (24 commits)
  moved Twig runtime to proper class
  fixed deprecated messages in tests
  add PHP errors options to XML schema definition
  [HttpCache] Unlink tmp file on error
  Added LB translation for #26327 (Errors sign for people that do not see colors)
  [TwigBridge] Fix rendering of currency by MoneyType
  Import InvalidArgumentException in PdoAdapter
  [DI] Do not suggest writing an implementation when multiple exist
  [Intl] Update ICU data to 61.1
  Use 3rd person verb form in command description
  [Validator] Add Japanese translation
  Support phpdbg SAPI in Debug::enable()
  [HttpKernel] DumpDataCollector: do not flush when a dumper is provided
  [DI] Fix hardcoded cache dir for warmups
  [Routing] fix tests
  [Routing] Fixed the importing of files using glob patterns that match multiple resources
  [Ldap] cast to string when checking empty passwords
  [Validator] sync validator translation id
  [WebProfilerBundle] use the router to resolve file links
  no type errors with invalid submitted data types
  ...
2018-04-02 11:52:41 +02:00
Fabien Potencier
c32ac36516 Merge branch '2.8' into 3.4
* 2.8:
  [Intl] Update ICU data to 61.1
  [Validator] Add Japanese translation
  Support phpdbg SAPI in Debug::enable()
  [Ldap] cast to string when checking empty passwords
  [Validator] sync validator translation id
  no type errors with invalid submitted data types
  [FrameworkBundle] Partially revert HttpCache is not longer abstract (4d075da)
  [Finder] Fixed leading/trailing / in filename
  allow html5 compatible rendering of forms with null names
  Change datetime input to datetime-local
2018-03-28 20:23:39 +02:00
Fabien Potencier
ce92aa6388 Merge branch '2.7' into 2.8
* 2.7:
  [Intl] Update ICU data to 61.1
  [Validator] Add Japanese translation
  Support phpdbg SAPI in Debug::enable()
  [Validator] sync validator translation id
  no type errors with invalid submitted data types
  [FrameworkBundle] Partially revert HttpCache is not longer abstract (4d075da)
  [Finder] Fixed leading/trailing / in filename
  allow html5 compatible rendering of forms with null names
  Change datetime input to datetime-local
2018-03-28 20:22:50 +02:00
Haralan Dobrev
7e7619ce57 Support phpdbg SAPI in Debug::enable() 2018-03-27 09:04:21 +02:00
Nicolas Grekas
2e7937e541 Merge branch '3.4' into 4.0
* 3.4: (32 commits)
  [Form] fix tests and deps
  [Cache] Rely on mock for Doctrine ArrayCache
  [FrameworkBundle] Respect debug mode when warm up annotations
  [Console] Fix docblock of DescriptorInterface::describe
  [Config] Handle nullable node name + fix inheritdocs
  [Security] added userChecker to SimpleAuthenticationProvider
  [Debug] fix test
  Fix typo in test method name
  Fixes #26563 (open_basedir restriction in effect)
  [Debug] Reset previous exception handler ealier to prevent infinite loop
  add hint in Github pull request template
  [Validator] Fix docblock of ClassMetadata#members
  [BrowserKit] Fix cookie path handling when $domain is null
  [DoctrineBridge] Don't rely on ClassMetadataInfo->hasField in DoctrineOrmTypeGuesser anymore
  [BrowserKit] Improves CookieJar::get
  [BrowserKit] Fix Cookie's PHPDoc
  [DomCrawler] Change bad wording in ChoiceFormField::untick
  [DomCrawler] Fix the PHPDoc of ChoiceFormField::setValue
  [DomCrawler] Avoid a useless call to strtolower
  [FrameworkBundle] HttpCache is not longer abstract
  ...
2018-03-19 23:35:49 +01:00
Nicolas Grekas
59ef7fdee7 Merge branch '2.8' into 3.4
* 2.8: (29 commits)
  [Console] Fix docblock of DescriptorInterface::describe
  [Config] Handle nullable node name + fix inheritdocs
  [Security] added userChecker to SimpleAuthenticationProvider
  [Debug] fix test
  Fix typo in test method name
  Fixes #26563 (open_basedir restriction in effect)
  [Debug] Reset previous exception handler ealier to prevent infinite loop
  add hint in Github pull request template
  [Validator] Fix docblock of ClassMetadata#members
  [BrowserKit] Fix cookie path handling when $domain is null
  [DoctrineBridge] Don't rely on ClassMetadataInfo->hasField in DoctrineOrmTypeGuesser anymore
  [BrowserKit] Improves CookieJar::get
  [BrowserKit] Fix Cookie's PHPDoc
  [DomCrawler] Change bad wording in ChoiceFormField::untick
  [DomCrawler] Fix the PHPDoc of ChoiceFormField::setValue
  [DomCrawler] Avoid a useless call to strtolower
  [FrameworkBundle] HttpCache is not longer abstract
  Php Inspections (EA Ultimate): address some of one-time used local variables
  [Intl] Load locale aliases to support alias fallbacks
  [CssSelector] Fix CSS identifiers parsing - they can start with dash
  ...
2018-03-19 23:32:39 +01:00
Nicolas Grekas
b74e4e0899 Merge branch '2.7' into 2.8
* 2.7:
  [Config] Handle nullable node name + fix inheritdocs
  [Security] added userChecker to SimpleAuthenticationProvider
  [Debug] fix test
  Fix typo in test method name
  Fixes #26563 (open_basedir restriction in effect)
  [Debug] Reset previous exception handler ealier to prevent infinite loop
  add hint in Github pull request template
  [Validator] Fix docblock of ClassMetadata#members
  [BrowserKit] Fix cookie path handling when $domain is null
  [DoctrineBridge] Don't rely on ClassMetadataInfo->hasField in DoctrineOrmTypeGuesser anymore
  [BrowserKit] Improves CookieJar::get
  [BrowserKit] Fix Cookie's PHPDoc
  [DomCrawler] Change bad wording in ChoiceFormField::untick
  [DomCrawler] Fix the PHPDoc of ChoiceFormField::setValue
  [DomCrawler] Avoid a useless call to strtolower
  [FrameworkBundle] HttpCache is not longer abstract
  [DomCrawler] extract(): fix a bug when the attribute list is empty
  [Config] Backport string|null api for node names
2018-03-19 22:11:56 +01:00
Nicolas Grekas
5555d0c0c4 [Debug] fix test 2018-03-19 19:37:04 +01:00
Nicolas Grekas
0a614d393b [Debug] Reset previous exception handler ealier to prevent infinite loop 2018-03-19 11:28:44 +01:00
9 changed files with 80 additions and 15 deletions

View File

@@ -42,7 +42,7 @@ class Debug
error_reporting(E_ALL);
}
if ('cli' !== PHP_SAPI) {
if (!\in_array(PHP_SAPI, array('cli', 'phpdbg'), true)) {
ini_set('display_errors', 0);
ExceptionHandler::register();
} elseif ($displayErrors && (!ini_get('log_errors') || ini_get('error_log'))) {

View File

@@ -380,14 +380,16 @@ class ErrorHandler
public function handleError($type, $message, $file, $line)
{
// Level is the current error reporting level to manage silent error.
$level = error_reporting();
$silenced = 0 === ($level & $type);
// Strong errors are not authorized to be silenced.
$level = error_reporting() | E_RECOVERABLE_ERROR | E_USER_ERROR | E_DEPRECATED | E_USER_DEPRECATED;
$level |= E_RECOVERABLE_ERROR | E_USER_ERROR | E_DEPRECATED | E_USER_DEPRECATED;
$log = $this->loggedErrors & $type;
$throw = $this->thrownErrors & $type & $level;
$type &= $level | $this->screamedErrors;
if (!$type || (!$log && !$throw)) {
return $type && $log;
return !$silenced && $type && $log;
}
$scope = $this->scopedErrors & $type;
@@ -493,7 +495,7 @@ class ErrorHandler
}
}
return $type && $log;
return !$silenced && $type && $log;
}
/**
@@ -547,14 +549,15 @@ class ErrorHandler
}
}
}
$exceptionHandler = $this->exceptionHandler;
$this->exceptionHandler = null;
try {
if (null !== $this->exceptionHandler) {
return \call_user_func($this->exceptionHandler, $exception);
if (null !== $exceptionHandler) {
return \call_user_func($exceptionHandler, $exception);
}
$handlerException = $handlerException ?: $exception;
} catch (\Throwable $handlerException) {
}
$this->exceptionHandler = null;
if ($exception === $handlerException) {
self::$reservedMemory = null; // Disable the fatal error handler
throw $exception; // Give back $exception to the native handler

View File

@@ -26,6 +26,9 @@ class ClassNotFoundException extends FatalErrorException
$previous->getSeverity(),
$previous->getFile(),
$previous->getLine(),
null,
true,
null,
$previous->getPrevious()
);
$this->setTrace($previous->getTrace());

View File

@@ -18,9 +18,9 @@ namespace Symfony\Component\Debug\Exception;
*/
class FatalErrorException extends \ErrorException
{
public function __construct(string $message, int $code, int $severity, string $filename, int $lineno, int $traceOffset = null, bool $traceArgs = true, array $trace = null)
public function __construct(string $message, int $code, int $severity, string $filename, int $lineno, int $traceOffset = null, bool $traceArgs = true, array $trace = null, \Throwable $previous = null)
{
parent::__construct($message, $code, $severity, $filename, $lineno);
parent::__construct($message, $code, $severity, $filename, $lineno, $previous);
if (null !== $trace) {
if (!$traceArgs) {

View File

@@ -157,7 +157,7 @@ class FlattenException
return $this->previous;
}
public function setPrevious(FlattenException $previous)
public function setPrevious(self $previous)
{
$this->previous = $previous;
}

View File

@@ -26,6 +26,9 @@ class UndefinedFunctionException extends FatalErrorException
$previous->getSeverity(),
$previous->getFile(),
$previous->getLine(),
null,
true,
null,
$previous->getPrevious()
);
$this->setTrace($previous->getTrace());

View File

@@ -26,6 +26,9 @@ class UndefinedMethodException extends FatalErrorException
$previous->getSeverity(),
$previous->getFile(),
$previous->getLine(),
null,
true,
null,
$previous->getPrevious()
);
$this->setTrace($previous->getTrace());

View File

@@ -40,7 +40,7 @@ class ExceptionHandler
{
$this->debug = $debug;
$this->charset = $charset ?: ini_get('default_charset') ?: 'UTF-8';
$this->fileLinkFormat = $fileLinkFormat ?: ini_get('xdebug.file_link_format') ?: get_cfg_var('xdebug.file_link_format');
$this->fileLinkFormat = $fileLinkFormat;
}
/**
@@ -355,13 +355,29 @@ EOF;
private function formatPath($path, $line)
{
$file = $this->escapeHtml(preg_match('#[^/\\\\]*+$#', $path, $file) ? $file[0] : $path);
$fmt = $this->fileLinkFormat;
$fmt = $this->fileLinkFormat ?: ini_get('xdebug.file_link_format') ?: get_cfg_var('xdebug.file_link_format');
if ($fmt && $link = is_string($fmt) ? strtr($fmt, array('%f' => $path, '%l' => $line)) : $fmt->format($path, $line)) {
return sprintf('<span class="block trace-file-path">in <a href="%s" title="Go to source">%s (line %d)</a></span>', $this->escapeHtml($link), $file, $line);
if (!$fmt) {
return sprintf('<span class="block trace-file-path">in <a title="%s%3$s"><strong>%s</strong>%s</a></span>', $this->escapeHtml($path), $file, 0 < $line ? ' line '.$line : '');
}
return sprintf('<span class="block trace-file-path">in <a title="%s line %3$d"><strong>%s</strong> (line %d)</a></span>', $this->escapeHtml($path), $file, $line);
if (\is_string($fmt)) {
$i = strpos($f = $fmt, '&', max(strrpos($f, '%f'), strrpos($f, '%l'))) ?: strlen($f);
$fmt = array(substr($f, 0, $i)) + preg_split('/&([^>]++)>/', substr($f, $i), -1, PREG_SPLIT_DELIM_CAPTURE);
for ($i = 1; isset($fmt[$i]); ++$i) {
if (0 === strpos($path, $k = $fmt[$i++])) {
$path = substr_replace($path, $fmt[$i], 0, strlen($k));
break;
}
}
$link = strtr($fmt[0], array('%f' => $path, '%l' => $line));
} else {
$link = $fmt->format($path, $line);
}
return sprintf('<span class="block trace-file-path">in <a href="%s" title="Go to source"><strong>%s</string>%s</a></span>', $this->escapeHtml($link), $file, 0 < $line ? ' line '.$line : '');
}
/**

View File

@@ -65,6 +65,30 @@ class ErrorHandlerTest extends TestCase
}
}
public function testErrorGetLast()
{
$handler = ErrorHandler::register();
$logger = $this->getMockBuilder('Psr\Log\LoggerInterface')->getMock();
$handler->setDefaultLogger($logger);
$handler->screamAt(E_ALL);
try {
@trigger_error('Hello', E_USER_WARNING);
$expected = array(
'type' => E_USER_WARNING,
'message' => 'Hello',
'file' => __FILE__,
'line' => __LINE__ - 5,
);
$this->assertSame($expected, error_get_last());
} catch (\Exception $e) {
restore_error_handler();
restore_exception_handler();
throw $e;
}
}
public function testNotice()
{
ErrorHandler::register();
@@ -464,4 +488,17 @@ class ErrorHandlerTest extends TestCase
$this->assertInstanceOf('Symfony\Component\Debug\Exception\ClassNotFoundException', $args[0]);
$this->assertStringStartsWith("Attempted to load class \"Foo\" from the global namespace.\nDid you forget a \"use\" statement", $args[0]->getMessage());
}
/**
* @expectedException \Exception
*/
public function testCustomExceptionHandler()
{
$handler = new ErrorHandler();
$handler->setExceptionHandler(function ($e) use ($handler) {
$handler->handleException($e);
});
$handler->handleException(new \Exception());
}
}