Upgrading from 2.5 to 2.6

max_delimiters_per_line Configuration Option

The max_delimiters_per_line configuration option was added in 2.6 to help protect against malicious input that could cause excessive memory usage or denial of service attacks. It defaults to PHP_INT_MAX (no limit) for backwards compatibility, which is safe when parsing trusted input. However, if you’re parsing untrusted input from users, you should probably set this to a reasonable value (somewhere between 100 and 1000) to protect against malicious inputs.

Custom Delimiter Processors

If you’re implementing a custom delimiter processor, and getDelimiterUse() has more logic than just a simple return statement, you should implement CacheableDelimiterProcessorInterface instead of DelimiterProcessorInterface to improve performance and avoid possible quadratic performance issues.

DelimiterProcessorInterface has a getDelimiterUse() method that tells the engine how many characters from the matching delimiters should be consumed. Simple processors usually always return a hard-coded integer like 1 or 2. However, some more advanced processors may need to examine the opening and closing delimiters and perform additional logic to determine whether they should be fully or partially consumed. Previously, these results could not be safely cached, resulting in possible quadratic performance issues.

In 2.6, the CacheableDelimiterProcessorInterface was introduced to allow these “dynamic” processors to be safely cached. It requires a new getCacheKey() method that returns a string that uniquely identifies the combination of factors considered when determining the delimiter use. This key is then used to cache the results of the search for a matching delimiter.


Edit this page