Skip to content

Commit d9473cc

Browse files
committed
Merge branch '7.4' into 8.0
* 7.4: (22 commits) Fix Warning: curl_multi_select(): timeout must be positive [PropertyInfo] Fix ReflectionExtractor handling of underscore-only property names ObjectNormalizer: allow null and scalar [Security] Fix `HttpUtils::createRequest()` when the context’s base URL isn’t empty [Serializer] fix Inherited properties normalization [OptionsResolver] Fix missing prototype key in nested error paths Bump Symfony version to 7.3.8 Update VERSION for 7.3.7 Update CHANGELOG for 7.3.7 Bump Symfony version to 6.4.30 Update VERSION for 6.4.29 Update CHANGELOG for 6.4.29 [FrameworkBundle] Update deprecation message for collect_serializer_data run test using a read-only directory on Windows too [Yaml] Fix parsing of unquoted multiline scalars with comments or blank lines [Clock] Align MockClock::sleep() behavior with NativeClock for negative values [OptionsResolver] Ensure remove() also unsets deprecation status Remove review state for Belarusian translations (entries 141 and 142) [ExpressionLanguage] Compile numbers with var_export in Compiler::repr for thread-safety compatibility with ext-redis 6.3 ...
2 parents 41cffc3 + b883fe5 commit d9473cc

File tree

2 files changed

+37
-4
lines changed

2 files changed

+37
-4
lines changed

HttpUtils.php

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,9 +68,21 @@ public function createRequest(Request $request, string $path): Request
6868
if ($trustedProxies = Request::getTrustedProxies()) {
6969
Request::setTrustedProxies([], Request::getTrustedHeaderSet());
7070
}
71-
$newRequest = Request::create($this->generateUri($request, $path), 'get', [], $request->cookies->all(), [], $request->server->all());
72-
if ($trustedProxies) {
73-
Request::setTrustedProxies($trustedProxies, Request::getTrustedHeaderSet());
71+
72+
$context = $this->urlGenerator?->getContext();
73+
if ($baseUrl = $context?->getBaseUrl()) {
74+
$context->setBaseUrl('');
75+
}
76+
77+
try {
78+
$newRequest = Request::create($this->generateUri($request, $path), 'get', [], $request->cookies->all(), [], $request->server->all());
79+
} finally {
80+
if ($trustedProxies) {
81+
Request::setTrustedProxies($trustedProxies, Request::getTrustedHeaderSet());
82+
}
83+
if ($baseUrl) {
84+
$context->setBaseUrl($baseUrl);
85+
}
7486
}
7587

7688
static $setSession;

Tests/HttpUtilsTest.php

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,13 @@
1717
use Symfony\Component\HttpFoundation\Session\SessionInterface;
1818
use Symfony\Component\Routing\Exception\MethodNotAllowedException;
1919
use Symfony\Component\Routing\Exception\ResourceNotFoundException;
20+
use Symfony\Component\Routing\Generator\UrlGenerator;
2021
use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
2122
use Symfony\Component\Routing\Matcher\RequestMatcherInterface;
2223
use Symfony\Component\Routing\Matcher\UrlMatcherInterface;
2324
use Symfony\Component\Routing\RequestContext;
25+
use Symfony\Component\Routing\Route;
26+
use Symfony\Component\Routing\RouteCollection;
2427
use Symfony\Component\Security\Http\HttpUtils;
2528
use Symfony\Component\Security\Http\SecurityRequestAttributes;
2629

@@ -228,7 +231,7 @@ public static function provideSecurityRequestAttributes()
228231
];
229232
}
230233

231-
public function testCreateRequestHandlesTrustedHeaders()
234+
public function testCreateRequestFromPathHandlesTrustedHeaders()
232235
{
233236
Request::setTrustedProxies(['127.0.0.1'], Request::HEADER_X_FORWARDED_PREFIX);
234237

@@ -238,6 +241,24 @@ public function testCreateRequestHandlesTrustedHeaders()
238241
);
239242
}
240243

244+
public function testCreateRequestFromRouteHandlesTrustedHeaders()
245+
{
246+
Request::setTrustedProxies(['127.0.0.1'], Request::HEADER_X_FORWARDED_PREFIX);
247+
248+
$request = Request::create('/', server: ['HTTP_X_FORWARDED_PREFIX' => '/foo']);
249+
250+
$urlGenerator = new UrlGenerator(
251+
$routeCollection = new RouteCollection(),
252+
(new RequestContext())->fromRequest($request),
253+
);
254+
$routeCollection->add('root', new Route('/'));
255+
256+
$this->assertSame(
257+
'http://localhost/foo/',
258+
(new HttpUtils($urlGenerator))->createRequest($request, 'root')->getUri(),
259+
);
260+
}
261+
241262
public function testCheckRequestPath()
242263
{
243264
$utils = new HttpUtils($this->getUrlGenerator());

0 commit comments

Comments
 (0)