Security context
High· 8.9GHSA-5vg9-5847-vvmq CWE-93Published Jun 17, 2026

Laravel Framework: CRLF injection in default email rule

Research this vulnerability

Research is free — Hunters explains how the bug works, the root-cause code pattern, how the fix addresses it, and how to test whether a target is affected, in chat. Investigate & write exploit is a paid run — the engine reads the advisory and fix commits, then builds and validates a working proof-of-concept exploit with reproduction steps.

Affected versions

13.0.0 → fixed in 13.10.00 → fixed in 12.60.0

Details

## Summary A CRLF injection vulnerability in Laravel's email validation, in combination with how Symfony Mailer and Symfony Mime handle certain character sequences, may allow an unauthenticated attacker to interfere with outbound email processing in applications that send mail to user-supplied addresses. ## Description Laravel applications that send email to addresses provided by users — for example during authentication flows or contact forms — may be vulnerable to manipulation of outbound mail content if the address is not adequately sanitized before it reaches the mail transport layer. An attacker who can supply an email address to such a flow may, under certain conditions, be able to influence the content of emails sent by the application, cause those emails to be delivered to unintended recipients, or cause the application's mail server to send unintended messages. ## Impact Affected applications may be exposed to unauthorized access and mail relay abuse. The severity depends on what the application sends by email and how its mail infrastructure is configured. ## Remediation Upgrade to version 12.60.0 or later, or 13.10.0 or later.

The fix

Release delta 13.0.0 → 13.10.0 (contains the fix)

· Mar 17, 2026, 02:19 PM+1322389compare
CHANGELOG.md+156 1
@@ -1,6 +1,161 @@
# Release Notes for 12.x
-## [Unreleased](https://github.com/laravel/framework/compare/v12.54.1...12.x)
+## [Unreleased](https://github.com/laravel/framework/compare/v13.0.0...13.x)
+
+## [v13.0.0](https://github.com/laravel/framework/compare/v12.54.1...v13.0.0) - 2026-03-17
+
+* Revert "[12.x] Query builder PDO fetch modes" by [@taylorotwell](https://github.com/taylorotwell) in https://github.com/laravel/framework/pull/54709
+* [13.x] Prepare branch alias for Laravel 13 by [@crynobone](https://github.com/crynobone) in https://github.com/laravel/framework/pull/54701
+* [12.x] Query builder PDO fetch modes + columns fix by [@bert-w](https://github.com/bert-w) in https://github.com/laravel/framework/pull/54734
+* [13.x] Fix Tests/CI environments by [@crynobone](https://github.com/crynobone) in https://github.com/laravel/framework/pull/54760
+* [13.x] Requires PHP 8.3 as minimum version by [@crynobone](https://github.com/crynobone) in https://github.com/laravel/framework/pull/54763
+* [13.x] Add missing parameters to `Response` methods `throw()` and `throwIf()` by [@cosmastech](https://github.com/cosmastech) in https://github.com/laravel/framework/pull/54798
+* [13.x] Fix scope removal in nested where conditions by [@willrowe](https://github.com/willrowe) in https://github.com/laravel/framework/pull/54816
+* [13.x] Remove function existence checks by [@xurshudyan](https://github.com/xurshudyan) in https://github.com/laravel/framework/pull/54876
+* [13.x] Removed unneeded default argument by [@AndrewMast](https://github.com/AndrewMast) in https://github.com/laravel/framework/pull/54900
+* [13.x] Fix unresolved merge conflict in Concurrency composer.json by [@jnoordsij](https://github.com/jnoordsij) in https://github.com/laravel/framework/pull/55233
+* [13.x] Fixes merge conflict by [@crynobone](https://github.com/crynobone) in https://github.com/laravel/framework/pull/55294
+* [13.x] Error exit code for clear command by [@mbardelmeijer](https://github.com/mbardelmeijer) in https://github.com/laravel/framework/pull/55355
+* [13.x] Add #[\Override] to the BatchFake class methods by [@imanghafoori1](https://github.com/imanghafoori1) in https://github.com/laravel/framework/pull/55358
+* [13.x] PDO Fetch modes by [@bert-w](https://github.com/bert-w) in https://github.com/laravel/framework/pull/55394
+* Allow Listeners to dynamically specify deleteWhenMissingModels by [@L3o-pold](https://github.com/L3o-pold) in https://github.com/laravel/framework/pull/55508
+* [13.x] Do not allow new model instances to be created during boot by [@willrowe](https://github.com/willrowe) in https://github.com/laravel/framework/pull/55685
+* Fix typo in `Blueprint`: `datetime` => `dateTime` by [@TheJoeSchr](https://github.com/TheJoeSchr) in https://github.com/laravel/framework/pull/55859
+* Feature: add support straight join in mysql by [@jferdi24](https://github.com/jferdi24) in https://github.com/laravel/framework/pull/55786
+* [13.x] Register subdomain routes before routes that are not linked to a domain by [@gdebrauwer](https://github.com/gdebrauwer) in https://github.com/laravel/framework/pull/55921
+* [13.x] Supports Symfony 7.4 & 8.0 by [@crynobone](https://github.com/crynobone) in https://github.com/laravel/framework/pull/56029
+* [13.x] Change to hyphenate prefixes by [@u01jmg3](https://github.com/u01jmg3) in https://github.com/laravel/framework/pull/56172
+* [13.x] Use exception object in JobAttempted event by [@bert-w](https://github.com/bert-w) in https://github.com/laravel/framework/pull/56148
+* [13.x] remove superfluous element by [@browner12](https://github.com/browner12) in https://github.com/laravel/framework/pull/56303
+* Add eventStream signature to ResponseFactory contract by [@csfh](https://github.com/csfh) in https://github.com/laravel/framework/pull/56306
+* fix: align ResponseFactory::eventStream signature with interface by [@KIKOmanasijev](https://github.com/KIKOmanasijev) in https://github.com/laravel/framework/pull/56484
+* [13.x] `Cache::touch()` & `Store::touch()` for TTL Extension by [@yitzwillroth](https://github.com/yitzwillroth) in https://github.com/laravel/framework/pull/55954
+* [13.x] Make QueueBusy event consistent with other queue events by [@AhmedAlaa4611](https://github.com/AhmedAlaa4611) in https://github.com/laravel/framework/pull/56673
+* [13.x] use clearer pagination view names by [@browner12](https://github.com/browner12) in https://github.com/laravel/framework/pull/56307
+* [13.x] Update `countBy` docblock in `Enumerable` interface to allow for enum callback by [@jnoordsij](https://github.com/jnoordsij) in https://github.com/laravel/framework/pull/56897
+* [13.x] Generate plural morph pivot table name by [@willrowe](https://github.com/willrowe) in https://github.com/laravel/framework/pull/56832
+* [13.x] Resolve Symfony Console `add()` method deprecation by [@KIKOmanasijev](https://github.com/KIKOmanasijev) in https://github.com/laravel/framework/pull/56488
+* [13.x] Add command method to contract by [@rodrigopedra](https://github.com/rodrigopedra) in https://github.com/laravel/framework/pull/56978
+* Refactor: replace strpos check with str_contains for clarity by [@arshidkv12](https://github.com/arshidkv12) in https://github.com/laravel/framework/pull/57042
+* Remove unnecessary parameters by [@arshidkv12](https://github.com/arshidkv12) in https://github.com/laravel/framework/pull/57047
+* [README.md] change laravel bootcamp to laravel learn by [@MoZayedSaeid](https://github.com/MoZayedSaeid) in https://github.com/laravel/framework/pull/57176
+* [13.x] Resolve issues with tests by [@jackbayliss](https://github.com/jackbayliss) in https://github.com/laravel/framework/pull/57258
+* [13.x] Bind manager instances to custom driver closures by [@daniser](https://github.com/daniser) in https://github.com/laravel/framework/pull/57173
+* [13.x] Compile full DELETE with JOIN including ORDER BY and LIMIT in MySQL grammar by [@tegos](https://github.com/tegos) in https://github.com/laravel/framework/pull/57196
+* [13.x] Flush `Str` factories when tearing down test case by [@cosmastech](https://github.com/cosmastech) in https://github.com/laravel/framework/pull/57296
+* [13.x] Update reset password notification subject by [@ganyicz](https://github.com/ganyicz) in https://github.com/laravel/framework/pull/57882
+* [13.x] Update verification email subject capitalization by [@ganyicz](https://github.com/ganyicz) in https://github.com/laravel/framework/pull/57884
+* [13.x] Simplify preg_replace_array callback by removing unnecessary foreach loop by [@sumaiazaman](https://github.com/sumaiazaman) in https://github.com/laravel/framework/pull/57924
+* [13.x] Fix changes from Laravel 12 by [@crynobone](https://github.com/crynobone) in https://github.com/laravel/framework/pull/57919
+* [13.x] Default `PendingRequest@pool()` to use 2 for concurrency by [@cosmastech](https://github.com/cosmastech) in https://github.com/laravel/framework/pull/57972
+* [13.x] Copy `Symfony\Component\HttpFoundation\Request::get()` functionality to avoid breaking changes. by [@crynobone](https://github.com/crynobone) in https://github.com/laravel/framework/pull/58081
+* [13.x] Defer registering schedule registered using `ApplicationBuilder::withScheduling()` by [@crynobone](https://github.com/crynobone) in https://github.com/laravel/framework/pull/58160
+* [13.x] Return data object from `ModelInspector` to make `show:model` more flexible by [@cosmastech](https://github.com/cosmastech) in https://github.com/laravel/framework/pull/58230
+* [13.x] Add ability to default queue by class type by [@jackbayliss](https://github.com/jackbayliss) in https://github.com/laravel/framework/pull/58094
+* [13.x] Add reason to WorkerStopping event by [@jackbayliss](https://github.com/jackbayliss) in https://github.com/laravel/framework/pull/58341
+* [13.x] Add starting to Monitor Contract by [@jackbayliss](https://github.com/jackbayliss) in https://github.com/laravel/framework/pull/58399
+* [13.x] add dispatchAfterResponse to the Dispatcher Contract by [@jackbayliss](https://github.com/jackbayliss) in https://github.com/laravel/framework/pull/58428
+* [13.x] Add origin verification to request forgery protection by [@benbjurstrom](https://github.com/benbjurstrom) in https://github.com/laravel/framework/pull/58400
+* [13.x] Improve `Enumerable` interface docblock types by [@jnoordsij](https://github.com/jnoordsij) in https://github.com/laravel/framework/pull/58181
+* Add missing chain method to interface by [@Jeroen-G](https://github.com/Jeroen-G) in https://github.com/laravel/framework/pull/58429
+* [13.x] Use unescaped unicode in `Js` support class by default by [@jnoordsij](https://github.com/jnoordsij) in https://github.com/laravel/framework/pull/58471
+* [13.x] Add enum types to repository contract / allow enums for tagged caches by [@jackbayliss](https://github.com/jackbayliss) in https://github.com/laravel/framework/pull/58481
+* [13.x] Restore eager-loaded relations when deserializing collections by [@dxnter](https://github.com/dxnter) in https://github.com/laravel/framework/pull/58477
+* [13.x] Bump minimum PHPUnit by [@crynobone](https://github.com/crynobone) in https://github.com/laravel/framework/pull/58537
+* [13.x] Respect default value for class dependencies in BoundMethod::call by [@comhon-project](https://github.com/comhon-project) in https://github.com/laravel/framework/pull/58553
+* [13.x] Bump minimum `symfony/process` by [@crynobone](https://github.com/crynobone) in https://github.com/laravel/framework/pull/58548
+* [13.x] Fix `illuminate/json-schema` dependencies by [@crynobone](https://github.com/crynobone) in https://github.com/laravel/framework/pull/58612
+* [13.x] Add `hasSole` and `hasMany` to the `Enumerable` interface by [@JosephSilber](https://github.com/JosephSilber) in https://github.com/laravel/framework/pull/58610
+* [13.x] Ensure bootstrap withMiddleware works for the DownCommand by [@jackbayliss](https://github.com/jackbayliss) in https://github.com/laravel/framework/pull/58571
+* [13.x] Remove override attribute on removed method by [@crynobone](https://github.com/crynobone) in https://github.com/laravel/framework/pull/58628
+* [13.x] Ensures compatibility with `symfony/console` 8 by [@crynobone](https://github.com/crynobone) in https://github.com/laravel/framework/pull/58629
+* [13.x] Add `cc` to Mailer contract by [@jackbayliss](https://github.com/jackbayliss) in https://github.com/laravel/framework/pull/58667
+* Fix ThrottleRequests over-throttling with multiple distinct rate limit keys (#54386) by [@HeathNaylor](https://github.com/HeathNaylor) in https://github.com/laravel/framework/pull/58707
+* [13.x] Add `markEmailAsUnverified` to `MustVerifyEmail` interface by [@amirhshokri](https://github.com/amirhshokri) in https://github.com/laravel/framework/pull/58701
+* [13.x] Adds previous exceptions in exception view by [@DarkGhostHunter](https://github.com/DarkGhostHunter) in https://github.com/laravel/framework/pull/58680
+* Attributes by [@taylorotwell](https://github.com/taylorotwell) in https://github.com/laravel/framework/pull/58578
+* [13.x] Accept CarbonInterval for PendingProcess timeouts by [@riesjart](https://github.com/riesjart) in https://github.com/laravel/framework/pull/58842
+* [13.x] Add Setup/TearDown trait attributes by [@jackbayliss](https://github.com/jackbayliss) in https://github.com/laravel/framework/pull/58685
+* [13.x] Allow aliases to be set in Signature Attribute (#58853) by [@jackbayliss](https://github.com/jackbayliss) in https://github.com/laravel/framework/pull/58874
+* [13.x] Adds PHPUnit 13 support by [@nunomaduro](https://github.com/nunomaduro) in https://github.com/laravel/framework/pull/58890
+* [13.x] Display route binding fields in `route:list` output by [@jackbayliss](https://github.com/jackbayliss) in https://github.com/laravel/framework/pull/58889
+* [13.x] feat: respect `DeleteWhenMissingModels` attribute on queued notifications by [@calebdw](https://github.com/calebdw) in https://github.com/laravel/framework/pull/58908
+* [13.x] Resolve DeleteNotificationWhenMissingModelTest by [@jackbayliss](https://github.com/jackbayliss) in https://github.com/laravel/framework/pull/58919
+* [13.x] add missing methods to Queue interface by [@cosmastech](https://github.com/cosmastech) in https://github.com/laravel/framework/pull/58914
+* [13.x] chore: define closure type on Middleware by [@calebdw](https://github.com/calebdw) in https://github.com/laravel/framework/pull/58929
+* [13.x] Ensure SyncQueue JobAttempted gets the actual exception by [@jackbayliss](https://github.com/jackbayliss) in https://github.com/laravel/framework/pull/58954
+* [13.x] Throw exception when served disks share the same URI by [@jackbayliss](https://github.com/jackbayliss) in https://github.com/laravel/framework/pull/58960
+* [13.x] withoutOverlapping docblock by [@jackbayliss](https://github.com/jackbayliss) in https://github.com/laravel/framework/pull/58973
+* [13.x] Fix `composer.json` by [@crynobone](https://github.com/crynobone) in https://github.com/laravel/framework/pull/58975
+* [13.x] Update the dependencies version by [@lucasmichot](https://github.com/lucasmichot) in https://github.com/laravel/framework/pull/58995
+* [13.x] Normalize composer.json by [@lucasmichot](https://github.com/lucasmichot) in https://github.com/laravel/framework/pull/58996
+* [13.x] Add `flushLocks()` support to Cache stores by [@amirhshokri](https://github.com/amirhshokri) in https://github.com/laravel/framework/pull/58907
+* [13.x] Add cache `flushLocks()` events by [@amirhshokri](https://github.com/amirhshokri) in https://github.com/laravel/framework/pull/59006
+* [13.x] Refactor parameter names that are implemented from the interface by [@mrvipchien](https://github.com/mrvipchien) in https://github.com/laravel/framework/pull/59015
+* [13.x] Add missing [@throws](https://github.com/throws) into docblock for various methods by [@mrvipchien](https://github.com/mrvipchien) in https://github.com/laravel/framework/pull/59016
+* Add insertOrIgnoreReturning method by [@antonkomarev](https://github.com/antonkomarev) in https://github.com/laravel/framework/pull/59025
+* Add corner case tests for insertOrIgnoreReturning by [@antonkomarev](https://github.com/antonkomarev) in https://github.com/laravel/framework/pull/59028
+* Extra validation on query builder upsert by [@antonkomarev](https://github.com/antonkomarev) in https://github.com/laravel/framework/pull/59029
+* [13.x] Add ErrorBag attribute support for FormRequest by [@Tresor-Kasenda](https://github.com/Tresor-Kasenda) in https://github.com/laravel/framework/pull/59033
+* [13.x] Add controller middleware attribute by [@JurianArie](https://github.com/JurianArie) in https://github.com/laravel/framework/pull/59030
+* [13.x] Add Authorize controller middleware attribute by [@JurianArie](https://github.com/JurianArie) in https://github.com/laravel/framework/pull/59048
+* [13.x] Fix `symfony/translation` deps by [@crynobone](https://github.com/crynobone) in https://github.com/laravel/framework/pull/59054
+* [13.x] Remove supports for `laravel/serializable-closure` v1 by [@crynobone](https://github.com/crynobone) in https://github.com/laravel/framework/pull/59053
+* Add saveOrIgnore Eloquent Model method for conflict-safe inserts by [@antonkomarev](https://github.com/antonkomarev) in https://github.com/laravel/framework/pull/59026
+* [13.x] Add support for named arguments in event dispatching and broadcasting by [@ph7jack](https://github.com/ph7jack) in https://github.com/laravel/framework/pull/59075
+* [13.x] Supports `pda/pheanstalk` 8.0+ and remove 5.x by [@crynobone](https://github.com/crynobone) in https://github.com/laravel/framework/pull/59072
+* [13.x] Bump dependencies by [@crynobone](https://github.com/crynobone) in https://github.com/laravel/framework/pull/59069
+* [13.x] Add ability to set channel name via Log contextual attribute by [@cosmastech](https://github.com/cosmastech) in https://github.com/laravel/framework/pull/59101
+* [13.x] Ensure insertOrIgnoreReturning only marks records as modified when rows are inserted by [@jackbayliss](https://github.com/jackbayliss) in https://github.com/laravel/framework/pull/59083
+* [13.x] Clean up ModelInfo by [@cosmastech](https://github.com/cosmastech) in https://github.com/laravel/framework/pull/59080
+* [13.x] Clean up JsonApi by [@cosmastech](https://github.com/cosmastech) in https://github.com/laravel/framework/pull/59079
+* [13.x] Indicate that raw queries should be literal strings by [@axlon](https://github.com/axlon) in https://github.com/laravel/framework/pull/59081
+* [13.x] Update brick/math constraint and rounding mode constant by [@balu-lt](https://github.com/balu-lt) in https://github.com/laravel/framework/pull/59107
+* [13.x] fix: MorphToMany morphClass type by [@calebdw](https://github.com/calebdw) in https://github.com/laravel/framework/pull/59110
+* [13.x] Rename Middleware attribute parameter from $value to $middleware by [@SanderMuller](https://github.com/SanderMuller) in https://github.com/laravel/framework/pull/59133
+* [13.x] fix: QueueRoutes docblocks for getRoute and $routes property by [@SanderMuller](https://github.com/SanderMuller) in https://github.com/laravel/framework/pull/59119
+* [13.x] fix: DoesntContain docblock typo by [@SanderMuller](https://github.com/SanderMuller) in https://github.com/laravel/framework/pull/59117
+* [13.x] BusFake assertNothingDispatched should check all dispatches by [@jackbayliss](https://github.com/jackbayliss) in https://github.com/laravel/framework/pull/59118
+* [13.x] fix: Align JsonApiResource flushState maxRelationshipDepth with trait default by [@SanderMuller](https://github.com/SanderMuller) in https://github.com/laravel/framework/pull/59116
+* [13.x] Make Cache touch() TTL required and remove redundant value fetching by [@SanderMuller](https://github.com/SanderMuller) in https://github.com/laravel/framework/pull/59121
+* [13.x] Fix previousPath() for external referrers by [@faytekin](https://github.com/faytekin) in https://github.com/laravel/framework/pull/59159
+* Add depth parameter to Arr::dot() by [@faytekin](https://github.com/faytekin) in https://github.com/laravel/framework/pull/59150
+* [13.x] Drop method_exists checks in MonitorCommand by [@jackbayliss](https://github.com/jackbayliss) in https://github.com/laravel/framework/pull/59151
+* [12.x] Add strict integer validation to Numeric validation rule by [@riesjart](https://github.com/riesjart) in https://github.com/laravel/framework/pull/59156
+* [12.x] Add *OrFail transaction methods to `BelongsToMany` by [@SanderMuller](https://github.com/SanderMuller) in https://github.com/laravel/framework/pull/59153
+* [13.x] Add Exception to BatchCanceled event by [@jackbayliss](https://github.com/jackbayliss) in https://github.com/laravel/framework/pull/59163
+* [13.x] Add support for `brick/math` 0.16 by [@balu-lt](https://github.com/balu-lt) in https://github.com/laravel/framework/pull/59165
+* Bump tar from 7.5.9 to 7.5.11 in /src/Illuminate/Foundation/resources/exceptions/renderer by [@dependabot](https://github.com/dependabot)[bot] in https://github.com/laravel/framework/pull/59164
+* [12.x] Add missing *OrFail transaction methods to BelongsToMany by [@erhanurgun](https://github.com/erhanurgun) in https://github.com/laravel/framework/pull/59168
+* [12.x] Add inOrderOf() method to query builder by [@faytekin](https://github.com/faytekin) in https://github.com/laravel/framework/pull/59162
+* [12.x] Add tcp_keepalive option to PhpRedis connector by [@heikokrebs](https://github.com/heikokrebs) in https://github.com/laravel/framework/pull/59158
+* [13.x] Add schedule:pause / resume command by [@jackbayliss](https://github.com/jackbayliss) in https://github.com/laravel/framework/pull/59169
+* [12.x] un`tap` PendingRequest by [@cosmastech](https://github.com/cosmastech) in https://github.com/laravel/framework/pull/59188
+* [12.x] Fix float to int deprecation in trans_choice() for certain locales by [@hamedelasma](https://github.com/hamedelasma) in https://github.com/laravel/framework/pull/59174
+* [12.x] Allow `touch()` to accept multiple columns by [@devajmeireles](https://github.com/devajmeireles) in https://github.com/laravel/framework/pull/59175
+* Revert "Add composite index to jobs table migration for improved queue polling" by [@taylorotwell](https://github.com/taylorotwell) in https://github.com/laravel/framework/pull/59202
+* [12.x] Add fluent string validation rule builder by [@SanderMuller](https://github.com/SanderMuller) in https://github.com/laravel/framework/pull/59201
+* [13.x] Add schedule resume and pause events by [@jackbayliss](https://github.com/jackbayliss) in https://github.com/laravel/framework/pull/59172
+* [13.x] insertOrIgnoreReturning with multiple unique keys by [@tpetry](https://github.com/tpetry) in https://github.com/laravel/framework/pull/59187
+* Update `Command::withProgressBar` phpdoc to account for arrow functions and non-void return types by [@billypoke](https://github.com/billypoke) in https://github.com/laravel/framework/pull/58766
+* [12.x] Lazily evaluate value for constraints in `HasOneOrManyThrough` by [@Jacobs63](https://github.com/Jacobs63) in https://github.com/laravel/framework/pull/59231
+* Add string helper to get initials from a string by [@denjaland](https://github.com/denjaland) in https://github.com/laravel/framework/pull/59230
+* fix: Strip gzip-compressed output from concurrent process response by [@NikhiltGhalme](https://github.com/NikhiltGhalme) in https://github.com/laravel/framework/pull/59224
+* [12.x] Fix failing tests introduced by #59201 by [@SanderMuller](https://github.com/SanderMuller) in https://github.com/laravel/framework/pull/59207
+* [12.x] Avoid redundant `Util::getParameterClassName()` call in container resolution by [@SanderMuller](https://github.com/SanderMuller) in https://github.com/laravel/framework/pull/59220
+* [12.x] Add missing conditional validation rule builders by [@SanderMuller](https://github.com/SanderMuller) in https://github.com/laravel/framework/pull/59209
+* [12.x] Skip placeholder replacements when message does not contain them by [@SanderMuller](https://github.com/SanderMuller) in https://github.com/laravel/framework/pull/59211
+* [12.x] Use `array_push` with spread operator in `MessageBag::all()` by [@SanderMuller](https://github.com/SanderMuller) in https://github.com/laravel/framework/pull/59217
+* [12.x] Cache Route instances in CompiledRouteCollection::getByName() by [@SanderMuller](https://github.com/SanderMuller) in https://github.com/laravel/framework/pull/59221
+* [13.x] Add additional Artisan attributes for usage, help and hidden by [@ziadoz](https://github.com/ziadoz) in https://github.com/laravel/framework/pull/59204
+* [12.x] Accept CarbonInterval for retry sleep duration by [@riesjart](https://github.com/riesjart) in https://github.com/laravel/framework/pull/59232
+* [12.x] Fix failing phpstan by [@GrahamCampbell](https://github.com/GrahamCampbell) in https://github.com/laravel/framework/pull/59245
+* [12.x] Update comments for PlanetScale MySQL and PostgreSQL by [@GrahamCampbell](https://github.com/GrahamCampbell) in https://github.com/laravel/framework/pull/59244
+* [12.x] Use big integers for database cache expiration column by [@tanerkay](https://github.com/tanerkay) in https://github.com/laravel/framework/pull/59243
+* [13.x] Allow brick/math ^0.17 by [@jackbayliss](https://github.com/jackbayliss) in https://github.com/laravel/framework/pull/59249
+* [12.x] Display file path and line number for closure routes in `route:list` by [@devajmeireles](https://github.com/devajmeireles) in https://github.com/laravel/framework/pull/59237
+* [12.x] Add wantsMarkdown() and acceptsMarkdown() request methods by [@joetannenbaum](https://github.com/joetannenbaum) in https://github.com/laravel/framework/pull/59238
+* [13.x] Ensure RequiredUnless handles null by [@jackbayliss](https://github.com/jackbayliss) in https://github.com/laravel/framework/pull/59235
## [v12.54.1](https://github.com/laravel/framework/compare/v12.54.0...v12.54.1) - 2026-03-10
src/Illuminate/Http/Client/RequestException.php | 4 ++--
tests/Http/HttpClientTest.php | 4 ++++
2 files changed, 6 insertions(+), 2 deletions(-)
CHANGELOG.md+32 1
@@ -1,6 +1,37 @@
# Release Notes for 12.x
-## [Unreleased](https://github.com/laravel/framework/compare/v12.54.1...12.x)
+## [Unreleased](https://github.com/laravel/framework/compare/v12.55.0...12.x)
+
+## [v12.55.0](https://github.com/laravel/framework/compare/v12.54.1...v12.55.0) - 2026-03-17
+
+* Add depth parameter to Arr::dot() by [@faytekin](https://github.com/faytekin) in https://github.com/laravel/framework/pull/59150
+* [12.x] Add strict integer validation to Numeric validation rule by [@riesjart](https://github.com/riesjart) in https://github.com/laravel/framework/pull/59156
+* [12.x] Add *OrFail transaction methods to `BelongsToMany` by [@SanderMuller](https://github.com/SanderMuller) in https://github.com/laravel/framework/pull/59153
+* Bump tar from 7.5.9 to 7.5.11 in /src/Illuminate/Foundation/resources/exceptions/renderer by [@dependabot](https://github.com/dependabot)[bot] in https://github.com/laravel/framework/pull/59164
+* [12.x] Add missing *OrFail transaction methods to BelongsToMany by [@erhanurgun](https://github.com/erhanurgun) in https://github.com/laravel/framework/pull/59168
+* [12.x] Add inOrderOf() method to query builder by [@faytekin](https://github.com/faytekin) in https://github.com/laravel/framework/pull/59162
+* [12.x] Add tcp_keepalive option to PhpRedis connector by [@heikokrebs](https://github.com/heikokrebs) in https://github.com/laravel/framework/pull/59158
+* [12.x] un`tap` PendingRequest by [@cosmastech](https://github.com/cosmastech) in https://github.com/laravel/framework/pull/59188
+* [12.x] Fix float to int deprecation in trans_choice() for certain locales by [@hamedelasma](https://github.com/hamedelasma) in https://github.com/laravel/framework/pull/59174
+* [12.x] Allow `touch()` to accept multiple columns by [@devajmeireles](https://github.com/devajmeireles) in https://github.com/laravel/framework/pull/59175
+* Revert "Add composite index to jobs table migration for improved queue polling" by [@taylorotwell](https://github.com/taylorotwell) in https://github.com/laravel/framework/pull/59202
+* [12.x] Add fluent string validation rule builder by [@SanderMuller](https://github.com/SanderMuller) in https://github.com/laravel/framework/pull/59201
+* Update `Command::withProgressBar` phpdoc to account for arrow functions and non-void return types by [@billypoke](https://github.com/billypoke) in https://github.com/laravel/framework/pull/58766
+* [12.x] Lazily evaluate value for constraints in `HasOneOrManyThrough` by [@Jacobs63](https://github.com/Jacobs63) in https://github.com/laravel/framework/pull/59231
+* Add string helper to get initials from a string by [@denjaland](https://github.com/denjaland) in https://github.com/laravel/framework/pull/59230
+* fix: Strip gzip-compressed output from concurrent process response by [@NikhiltGhalme](https://github.com/NikhiltGhalme) in https://github.com/laravel/framework/pull/59224
+* [12.x] Fix failing tests introduced by #59201 by [@SanderMuller](https://github.com/SanderMuller) in https://github.com/laravel/framework/pull/59207
+* [12.x] Avoid redundant `Util::getParameterClassName()` call in container resolution by [@SanderMuller](https://github.com/SanderMuller) in https://github.com/laravel/framework/pull/59220
+* [12.x] Add missing conditional validation rule builders by [@SanderMuller](https://github.com/SanderMuller) in https://github.com/laravel/framework/pull/59209
+* [12.x] Skip placeholder replacements when message does not contain them by [@SanderMuller](https://github.com/SanderMuller) in https://github.com/laravel/framework/pull/59211
+* [12.x] Use `array_push` with spread operator in `MessageBag::all()` by [@SanderMuller](https://github.com/SanderMuller) in https://github.com/laravel/framework/pull/59217
+* [12.x] Cache Route instances in CompiledRouteCollection::getByName() by [@SanderMuller](https://github.com/SanderMuller) in https://github.com/laravel/framework/pull/59221
+* [12.x] Accept CarbonInterval for retry sleep duration by [@riesjart](https://github.com/riesjart) in https://github.com/laravel/framework/pull/59232
+* [12.x] Fix failing phpstan by [@GrahamCampbell](https://github.com/GrahamCampbell) in https://github.com/laravel/framework/pull/59245
+* [12.x] Update comments for PlanetScale MySQL and PostgreSQL by [@GrahamCampbell](https://github.com/GrahamCampbell) in https://github.com/laravel/framework/pull/59244
+* [12.x] Use big integers for database cache expiration column by [@tanerkay](https://github.com/tanerkay) in https://github.com/laravel/framework/pull/59243
+* [12.x] Display file path and line number for closure routes in `route:list` by [@devajmeireles](https://github.com/devajmeireles) in https://github.com/laravel/framework/pull/59237
+* [12.x] Add wantsMarkdown() and acceptsMarkdown() request methods by [@joetannenbaum](https://github.com/joetannenbaum) in https://github.com/laravel/framework/pull/59238
## [v12.54.1](https://github.com/laravel/framework/compare/v12.54.0...v12.54.1) - 2026-03-10
CHANGELOG.md | 157 ++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 156 insertions(+), 1 deletion(-)
src/Illuminate/Testing/Constraints/SeeInHtml.php+137 0
@@ -0,0 +1,137 @@
+<?php
+
+namespace Illuminate\Testing\Constraints;
+
+use PHPUnit\Framework\Constraint\Constraint;
+use ReflectionClass;
+
+class SeeInHtml extends Constraint
+{
+ /**
+ * The string under validation.
+ *
+ * @var string
+ */
+ protected $content;
+
+ /**
+ * Indicates the values must appear in order.
+ *
+ * @var bool
+ */
+ protected $ordered;
+
+ /**
+ * Indicates whether to negate the assertion.
+ *
+ * @var bool
+ */
+ protected $negate;
+
+ /**
+ * The last value that failed to pass validation.
+ *
+ * @var string
+ */
+ protected $failedValue;
+
+ /**
+ * Create a new constraint instance.
+ *
+ * @param string $content
+ */
+ public function __construct($content, $ordered = false, $negate = false)
+ {
+ $this->content = $content;
+ $this->ordered = $ordered;
+ $this->negate = $negate;
+ }
+
+ /**
+ * Determine if the rule passes validation.
+ *
+ * @param array $values
+ */
+ public function matches($values): bool
+ {
+ $normalizedContent = $this->normalize($this->content);
+
+ $position = 0;
+
+ foreach ($values as $value) {
+ if (empty($value)) {
+ continue;
+ }
+
+ $normalizedValue = $this->normalize($value);
+
+ $valuePosition = mb_strpos($normalizedContent, $normalizedValue, $position);
+
+ if ($this->negate) {
+ if ($valuePosition !== false) {
+ $this->failedValue = $value;
+
+ return false;
+ }
+
+ continue;
+ }
+
+ if ($valuePosition === false || $valuePosition < $position) {
+ $this->failedValue = $value;
+
+ return false;
+ }
+
+ if ($this->ordered) {
+ $position = $valuePosition + mb_strlen($normalizedValue);
+ }
+ }
+
+ return true;
+ }
+
+ /**
+ * Get the description of the failure.
+ *
+ * @param array $values
+ */
+ public function failureDescription($values): string
+ {
+ if ($this->negate) {
+ return sprintf(
+ '\'%s\' does not contain "%s".',
+ $this->content,
+ $this->failedValue
+ );
+ }
+
+ return sprintf(
+ '\'%s\' contains "%s"%s',
+ $this->content,
+ $this->failedValue,
+ $this->ordered ? ' in specified order.' : '.'
+ );
+ }
+
+ /**
+ * Normalize the given value.
+ */
+ protected function normalize(string $value): ?string
+ {
+ $value = strip_tags($value);
+ $value = html_entity_decode($value, ENT_QUOTES, 'UTF-8');
+ $value = trim($value);
+ $value = preg_replace('/\s+/', ' ', $value);
+
+ return $value;
+ }
+
+ /**
+ * Get a string representation of the object.
+ */
+ public function toString(): string
+ {
+ return (new ReflectionClass($this))->name;
+ }
+}
src/Illuminate/Queue/Attributes/ReadsQueueAttributes.php+2 51
@@ -2,58 +2,9 @@
namespace Illuminate\Queue\Attributes;
-use Exception;
-use ReflectionClass;
+use Illuminate\Support\Traits\ReadsClassAttributes;
trait ReadsQueueAttributes
{
- /**
- * Get a configuration value from an attribute, falling back to a property.
- *
- * @param object $job
- * @param string $attributeClass
- * @param string|null $property
- * @param mixed $default
- * @return mixed
- */
- protected function getAttributeValue($job, string $attributeClass, ?string $property = null, $default = null)
- {
- try {
- $reflection = new ReflectionClass($job);
-
- do {
- $attributes = $reflection->getAttributes($attributeClass);
-
- if (count($attributes) > 0) {
- return $this->extractAttributeValue($attributes[0]->newInstance());
- }
- } while ($reflection = $reflection->getParentClass());
- } catch (Exception) {
- //
- }
-
- if ($property !== null) {
- return $job->{$property} ?? $default;
- }
-
- return $default;
- }
-
- /**
- * Extract the value from an attribute instance.
- *
- * @param object $instance
- * @return mixed
- */
- protected function extractAttributeValue($instance)
- {
- if ($instance instanceof DeleteWhenMissingModels || $instance instanceof FailOnTimeout) {
- return true;
- }
-
- // For value attributes, return the first property value...
- $properties = get_object_vars($instance);
-
- return reset($properties);
- }
+ use ReadsClassAttributes;
}
src/Illuminate/Support/Traits/ReadsClassAttributes.php+54 0
@@ -0,0 +1,54 @@
+<?php
+
+namespace Illuminate\Support\Traits;
+
+use Exception;
+use ReflectionClass;
+
+trait ReadsClassAttributes
+{
+ /**
+ * Get a configuration value from an attribute, falling back to a property.
+ *
+ * @param object $target
+ * @param string $attributeClass
+ * @param string|null $property
+ * @param mixed $default
+ * @return mixed
+ */
+ protected function getAttributeValue($target, string $attributeClass, ?string $property = null, $default = null)
+ {
+ try {
+ $reflection = new ReflectionClass($target);
+
+ do {
+ $attributes = $reflection->getAttributes($attributeClass);
+
+ if (count($attributes) > 0) {
+ return $this->extractAttributeValue($attributes[0]->newInstance());
+ }
+ } while ($reflection = $reflection->getParentClass());
+ } catch (Exception) {
+ //
+ }
+
+ if ($property !== null) {
+ return $target->{$property} ?? $default;
+ }
+
+ return $default;
+ }
+
+ /**
+ * Extract the value from an attribute instance.
+ *
+ * @param object $instance
+ * @return mixed
+ */
+ protected function extractAttributeValue($instance)
+ {
+ $properties = get_object_vars($instance);
+
+ return count($properties) === 0 ? true : reset($properties);
+ }
+}
src/Illuminate/Foundation/Application.php | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
tests/Support/SupportStrTest.php+5 2
@@ -1425,8 +1425,11 @@ public function testWordCount()
$this->assertEquals(2, Str::wordCount('Hello, world!'));
$this->assertEquals(10, Str::wordCount('Hi, this is my first contribution to the Laravel framework.'));
- $this->assertEquals(0, Str::wordCount('мама'));
- $this->assertEquals(0, Str::wordCount('мама мыла раму'));
+ // str_word_count() without $characters does not reliably handle multibyte
+ // strings — results depend on the system locale's isalpha() behavior
+ // (e.g. macOS 15+ changed LC_CTYPE defaults). See php/php-src#19828.
+ $this->assertEquals(str_word_count('мама'), Str::wordCount('мама'));
+ $this->assertEquals(str_word_count('мама мыла раму'), Str::wordCount('мама мыла раму'));
$this->assertEquals(1, Str::wordCount('мама', 'абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'));
$this->assertEquals(3, Str::wordCount('мама мыла раму', 'абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ'));
src/Illuminate/Support/Uri.php | 12 ++++++++++--
tests/Support/SupportUriTest.php | 6 +++++-
2 files changed, 15 insertions(+), 3 deletions(-)
src/Illuminate/Console/Scheduling/CronExpressionTimezoneConverter.php+176 0
@@ -0,0 +1,176 @@
+<?php
+
+namespace Illuminate\Console\Scheduling;
+
+use DateTimeZone;
+use Illuminate\Support\Carbon;
+
+class CronExpressionTimezoneConverter
+{
+ /**
+ * Convert an event cron expression to the display timezone.
+ *
+ * Returns one or more expressions when values straddle a day boundary.
+ *
+ * @param \Illuminate\Console\Scheduling\Event $event
+ * @param \DateTimeZone $timezone
+ * @return array<string>
+ */
+ public static function forEvent(Event $event, DateTimeZone $timezone)
+ {
+ $eventTimezone = static::resolveEventTimezone($event, $timezone);
+
+ [$totalOffsetMinutes, $hourOffset, $minuteOffset] = static::offsetComponents(
+ $eventTimezone, $timezone
+ );
+
+ if ($totalOffsetMinutes === 0) {
+ return [$event->expression];
+ }
+
+ $segments = preg_split("/\s+/", $event->expression);
+ $minuteGroups = static::shiftAndGroup($segments[0], $minuteOffset, 60);
+
+ $expressions = [];
+
+ foreach ($minuteGroups as $minuteCarry => $minuteValues) {
+ $hourGroups = static::shiftAndGroup($segments[1], $hourOffset + $minuteCarry, 24);
+
+ foreach ($hourGroups as $hourCarry => $hourValues) {
+ $parts = $segments;
+ $parts[0] = $minuteValues;
+ $parts[1] = $hourValues;
+
+ foreach (static::expressionsForHourCarry($segments, $parts, $hourCarry) as $expression) {
+ $expressions[] = $expression;
+ }
+ }
+ }
+
+ return $expressions;
+ }
+
+ /**
+ * Resolve the timezone used by the given event.
+ *
+ * @param \Illuminate\Console\Scheduling\Event $event
+ * @param \DateTimeZone $defaultTimezone
+ * @return \DateTimeZone
+ */
+ protected static function resolveEventTimezone(Event $event, DateTimeZone $defaultTimezone)
+ {
+ return $event->timezone instanceof DateTimeZone
+ ? $event->timezone
+ : new DateTimeZone($event->timezone ?? $defaultTimezone->getName());
+ }
+
+ /**
+ * Get offset components between the event and display timezones.
+ *
+ * @return array{int, int, int}
+ */
+ protected static function offsetComponents(DateTimeZone $eventTimezone, DateTimeZone $displayTimezone)
+ {
+ $now = Carbon::now();
+
+ $totalOffsetMinutes = intdiv(
+ $displayTimezone->getOffset($now) - $eventTimezone->getOffset($now),
+ 60
+ );
+
+ return [$totalOffsetMinutes, intdiv($totalOffsetMinutes, 60), $totalOffsetMinutes % 60];
+ }
+
+ /**
+ * Build expressions for the given hour carry direction.
+ *
+ * @param array<int, string> $segments
+ * @param array<int, string> $parts
+ * @return array<int, string>
+ */
+ protected static function expressionsForHourCarry(array $segments, array $parts, int $hourCarry)
+ {
+ if ($hourCarry === 0) {
+ return [implode(' ', $parts)];
+ }
+
+ $parts[4] = static::shiftField($segments[4], $hourCarry, 7);
+
+ $dayGroups = static::shiftAndGroup($segments[2], $hourCarry, 31, min: 1);
+
+ $expressions = [];
+
+ foreach ($dayGroups as $dayCarry => $dayValues) {
+ $dayParts = $parts;
+ $dayParts[2] = $dayValues;
+
+ if ($dayCarry !== 0) {
+ $dayParts[3] = static::shiftField($segments[3], $dayCarry, 12, min: 1);
+ }
+
+ $expressions[] = implode(' ', $dayParts);
+ }
+
+ return $expressions;
+ }
+
+ /**
+ * Shift values in a cron field and group them by carry direction.
+ *
+ * @param string $field
+ * @param int $offset
+ * @param int $mod
+ * @return array<int, string>
+ */
+ protected static function shiftAndGroup($field, $offset, $mod, $min = 0)
+ {
+ if ($offset === 0 || ! preg_match('/^[\d,]+$/', $field)) {
+ return [0 => $field];
+ }
+
+ $groups = [];
+
+ foreach (explode(',', $field) as $value) {
+ $new = (int) $value + $offset;
+ $carry = 0;
+
+ if ($new >= $mod + $min) {
+ $carry = 1;
+ $new -= $mod;
+ } elseif ($new < $min) {
+ $carry = -1;
+ $new += $mod;
+ }
+
+ $groups[$carry][] = $new;
+ }
+
+ return collect($groups)->map(function ($values) {
+ sort($values);
+
+ return implode(',', $values);
+ })->all();
+ }
+
+ /**
+ * Shift a cron field by the given offset.
+ *
+ * @param string $field
+ * @param int $offset
+ * @param int $mod
+ * @param int $min
+ * @return string
+ */
+ protected static function shiftField($field, $offset, $mod, $min = 0)
+ {
+ if ($offset === 0 || ! preg_match('/^[\d,]+$/', $field)) {
+ return $field;
+ }
+
+ $shifted = collect(explode(',', $field))
+ ->map(fn ($v) => (((int) $v + $offset - $min) % $mod + $mod) % $mod + $min)
+ ->sort();
+
+ return $shifted->implode(',');
+ }
+}
src/Illuminate/Broadcasting/BroadcastManager.php+1 1
@@ -465,7 +465,7 @@ protected function getConfig($name)
*/
public function getDefaultDriver()
{
- return $this->app['config']['broadcasting.default'];
+ return $this->app['config']['broadcasting.default'] ?? 'null';
}
/**
<65236355+JulianGlueck@users.noreply.github.com>
(#59268)
.../Translation/MessageSelector.php | 26 +++++++++----------
.../TranslationMessageSelectorTest.php | 7 +++++
2 files changed, 20 insertions(+), 13 deletions(-)
tests/Console/CommandTest.php+35 0
@@ -3,6 +3,7 @@
namespace Illuminate\Tests\Console;
use Illuminate\Console\Application;
+use Illuminate\Console\Attributes\Aliases;
use Illuminate\Console\Attributes\Help;
use Illuminate\Console\Attributes\Hidden;
use Illuminate\Console\Attributes\Signature;
@@ -223,6 +224,22 @@ public function testSignatureAttributeCanSetAliases()
$this->assertSame(['bar:baz', 'baz:qux'], $command->getAliases());
}
+ public function testAliasesAttributeCanSetAliases()
+ {
+ $command = new AliasesAttributeCommand;
+
+ $this->assertSame('foo:bar', $command->getName());
+ $this->assertSame(['bar:baz', 'baz:qux'], $command->getAliases());
+ }
+
+ public function testAliasesAttributeOverridesSignatureAliases()
+ {
+ $command = new AliasesAttributeOverridesSignatureCommand;
+
+ $this->assertSame('foo:bar', $command->getName());
+ $this->assertSame(['override:alias'], $command->getAliases());
+ }
+
public function testHiddenAttributeHidesCommand()
{
$command = new HiddenCommand;
@@ -280,3 +297,21 @@ public function handle()
{
}
}
+
+#[Signature('foo:bar')]
+#[Aliases(['bar:baz', 'baz:qux'])]
+class AliasesAttributeCommand extends Command
+{
+ public function handle()
+ {
+ }
+}
+
+#[Signature('foo:bar', aliases: ['ignored:alias'])]
+#[Aliases(['override:alias'])]
+class AliasesAttributeOverridesSignatureCommand extends Command
+{
+ public function handle()
+ {
+ }
+}
tests/Translation/TranslationMessageSelectorTest.php+7 3
@@ -23,6 +23,13 @@ public function testChooseWithFloatDoesNotTriggerDeprecation()
$this->assertEquals('many', $selector->choose('{0} zero|{1} one|[2,*] many', 2.75, 'pl'));
}
+ public function testChoosePluralizesFloats()
+ {
+ $selector = new MessageSelector;
+
+ $this->assertEquals('plural', $selector->choose('singular|plural', 0.5, 'en'));
+ }
+
public static function chooseTestData()
{
return [
- Update str_word_count test expectations for PHP 8.5 which changed
multibyte character handling (counts individual bytes as words)
- URL-encode Chinese characters in ValidatePathEncoding test to match
real HTTP behavior and avoid Symfony request parsing changes in PHP 8.5
- Strip quoted-printable soft line break from CID extraction in mail test
.../Http/Middleware/ValidatePathEncodingTest.php | 2 +-
tests/Integration/Mail/SendingMarkdownMailTest.php | 4 ++--
tests/Support/SupportStrTest.php | 7 +++++--
3 files changed, 8 insertions(+), 5 deletions(-)
src/Illuminate/Foundation/Application.php+1 1
@@ -45,7 +45,7 @@ class Application extends Container implements ApplicationContract, CachesConfig
*
* @var string
*/
- const VERSION = '12.54.1';
+ const VERSION = '12.55.0';
/**
* The base path for the Laravel installation.
CHANGELOG.md | 33 ++++++++++++++++++++++++++++++++-
1 file changed, 32 insertions(+), 1 deletion(-)
src/Illuminate/Http/Client/RequestException.php+2 2
@@ -42,11 +42,11 @@ class RequestException extends HttpClientException
*/
public function __construct(Response $response, $truncateExceptionsAt = null)
{
- parent::__construct($this->prepareMessage($response), $response->status());
-
$this->truncateExceptionsAt = $truncateExceptionsAt;
$this->response = $response;
+
+ parent::__construct($this->prepareMessage($response), $response->status());
}
/**
tests/Http/HttpClientTest.php+4 0
@@ -1420,8 +1420,12 @@ public function testRequestLevelTruncationLevelOnRequestException()
$exception = $e;
}
+ // Ensure the exception message is truncated according to the request level truncation setting.
+ $this->assertEquals("HTTP request returned status code 403:\n[\"e (truncated...)\n", $exception->getMessage());
+
$exception->report();
+ // Ensure that the truncation level is not changed when reporting the exception.
$this->assertEquals("HTTP request returned status code 403:\n[\"e (truncated...)\n", $exception->getMessage());
$this->assertEquals(60, RequestException::$truncateAt);
tests/Http/Middleware/PreventRequestForgeryTest.php | 3 ++-
tests/Testing/Concerns/TestViewsTest.php | 2 --
tests/View/ClearCommandTest.php | 2 +-
3 files changed, 3 insertions(+), 4 deletions(-)
tests/Http/Middleware/PreventRequestForgeryTest.php+2 1
@@ -17,8 +17,9 @@ class PreventRequestForgeryTest extends TestCase
{
protected function tearDown(): void
{
- m::close();
PreventRequestForgery::flushState();
+
+ parent::tearDown();
}
public function test_same_origin_header_passes()
tests/Testing/Concerns/TestViewsTest.php+0 2
@@ -44,8 +44,6 @@ protected function tearDown(): void
unset($_SERVER['LARAVEL_PARALLEL_TESTING']);
- m::close();
-
parent::tearDown();
}
More files changed — see the full commit.

References