The Symfony PHP framework
languages detected by GitHub · % code
every merged PR, grouped by type, newest first
In Scheduler's `DebugCommand`, reads the persisted `scheduler_checkpoint_<name>` cache entry with `$save=false` as the base date when `--date` is omitted and the schedule is stateful.
Sanitizes stack-trace args inside `FlattenExceptionNormalizer::normalize()` by recursively replacing non-UTF-8 string arguments with `'(binary string)'`, preventing `NotEncodableValueException` when JSON-encoding Messenger's `ErrorDetailsStamp` for the failure transport.
In `Inline::parseSequence`/`parseMapping`, skips `&xxx` anchor extraction when the scalar originated from a tag (`!!str`) or a bare anchor, aligning the flow parser with the block parser for `[&x]` and `[!!str &x]`.
Wraps `serialize($token)` in `KernelBrowser::loginUser()` (KernelBrowser.php:142) with a try/catch that rethrows a `\LogicException` naming the User class and pointing to `__serialize()`/`__unserialize()`, original exception kept as `previous`.
Removes `nonce` from attributes inlined into the es-module-shims polyfill IIFE rendered by `ImportMapRenderer` and propagates it at runtime via `document.currentScript?.nonce`, stabilizing Turbo's `<head>` signature.
URL-encodes each tmp path segment via rawurlencode inside XliffUtils::shouldEnableEntityLoader before feeding it to DOMDocument::schemaValidateSource, killing the libxml warning that flooded dev.log on Windows user profiles containing spaces.
Fixes `Window::add()` zeroing `hitCount` on reset by carrying reservation debt via `getCarriedHitCount()`; `getExpirationTime()` now grows with outstanding debt so idle FixedWindow limiters don't lose state and re-issue borrowed tokens.
Clarifies in the PHPDoc of `AbstractLoginFormAuthenticator::getLoginUrl()` that its return value is compared verbatim against `$request->getBaseUrl().$request->getPathInfo()` inside `supports()`, so an absolute URL from `HttpUtils::generateUri()` silently bypasses authentication.
Casts `ini_get('default_socket_timeout')` to `int` when stored as fallback in `Connection`, since PHP 8.4 ext-ldap rejects strings for `LDAP_OPT_NETWORK_TIMEOUT`, breaking `bind()` when `network_timeout` is unset.
Moves deduplication lock release out of the finally block in DeduplicateMiddleware: lock stays held when the handler throws, released only on success, preventing duplicates while the envelope sits on the retry transport.
Reads `ErrorCode ?? 0` and `Message ?? message ?? ''` defensively in `PostmarkApiTransport::doSendApi()` to handle the lowercased 413 payload without `Undefined array key` crash.
Moves the `\TypeError` → `NotNormalizableValueException` translation into `PropertyNormalizer::setAttributeValue()` and replaces the parent's string-match on the « must not be accessed before initialization » message with a proactive `ReflectionProperty::isInitialized()` check.
Drops the `rtrim('=')` on the Ntfy transport's `Authorization: Basic` header to preserve RFC 4648 base64 padding, fixing auth rejection when `user:password` byte length isn't a multiple of 3.
Adds an `isHandlingPlaceholder()` guard in `NumericNode::finalizeValue()` that skips the min/max check while a typed env placeholder is being resolved, preventing rejection of the sentinel 0 fixture.
In Email::prepareParts(), stops overwriting inline DataPart name with auto-generated Content-ID; falls back to Content-ID only when name is empty, avoiding 5.7.1 Forbidden attachment type rejections.
Makes `FrameworkBundle::boot()` eagerly fetch the `mime_types` service so `MimeTypes::setDefault()` fires, and has `AddMimeTypeGuesserPass` mark it public only when a `mime.mime_type_guesser`-tagged service exists.
Adds a `$processing` boolean flag in `AbstractTokenProcessor::doInvoke()` wrapped in `try/finally` that short-circuits and returns the record untouched when Monolog re-enters the processor while `getToken()` is still triggering the firewall initializer.
Fixes `TokenBucket::getExpirationTime()` which returned `calculateTimeForTokens(burstSize)`: TTL now becomes `max(burstSize, burstSize - tokens)` so a negative-token reservation debt survives cache eviction before refill.
Removes CURL_LOCK_DATA_CONNECT from CurlHttpClient's curl_share since the multi handle already shares the connection cache, restoring CURLMOPT_MAX_HOST_CONNECTIONS enforcement for max_host_connections.
Adds an `interface_exists(FormTypeGuesserInterface::class)` guard before `DoctrineOrmTypeGuesser`'s class keyword, throwing `LogicException` instead of the PHP fatal triggered since 7.4.7 by `DebugClassLoader`'s reworked interface traversal.
Widens DoctrineBridge composer.json `conflict` entry to `<5.4|>=8`, blocking symfony/property-info 8.x whose new `getType()` interface leaves `DoctrineExtractor::getTypes()` as an unimplemented abstract method.
Replaces the hardcoded `messages` loop in `TranslationExtractCommand::removeNoFillTranslations()` with iteration over `$operation->getDomains()`, preventing the `\0NoFill\0` sentinel from leaking into YAML files for `validators` or `validators+intl-icu` catalogues.
In `SendFailedMessageToFailureTransportListener`, now matches `SentToFailureTransportStamp::getOriginalReceiverName()` against the current receiver instead of requiring empty `failureTransportsByName`, restoring manual opt-out for transient errors.
Detects explicit `--max` via `InputInterface::hasParameterOption(['--max'], true)` in `FailedMessagesShowCommand`; otherwise passes `null` to `ListableReceiverInterface::all()` so `--stats` counts every failed message instead of capping at 50.
Splits checks in `JsonLoginAuthenticator::getCredentials()`: empty username/password now throws `BadCredentialsException` (routed through `onAuthenticationFailure`) instead of `BadRequestHttpException` 400, matching `UserBadge` behavior since #58007.
In `UrlMatcher::matchRequest()`, temporarily swaps `$this->context` for a `RequestContext::fromRequest()` derived from the passed Request, restored via `finally`, so `matchCollection()` reads the correct HTTP method.
Emits a `Keeping array build parameter` log in `RemoveBuildParametersPass` when `preserveArrays=true` keeps a dot-prefixed array parameter, previously dropped silently from the dumped container by `PhpDumper`.