Skip to content

Commit 3e2d776

Browse files
committed
fix php7 build
1 parent 889ce48 commit 3e2d776

File tree

2 files changed

+56
-5
lines changed

2 files changed

+56
-5
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<?php // lint >= 8.0
2+
3+
namespace Bug2001Php8;
4+
5+
use function PHPStan\Testing\assertType;
6+
7+
class HelloWorld
8+
{
9+
public function parseUrl(string $url): string
10+
{
11+
$parsedUrl = parse_url(urldecode($url));
12+
assertType('array{scheme?: string, host?: string, port?: int<0, 65535>, user?: string, pass?: string, path?: string, query?: string, fragment?: string}|false', $parsedUrl);
13+
14+
if (array_key_exists('host', $parsedUrl)) {
15+
assertType('array{scheme?: string, host: string, port?: int<0, 65535>, user?: string, pass?: string, path?: string, query?: string, fragment?: string}', $parsedUrl);
16+
throw new \RuntimeException('Absolute URLs are prohibited for the redirectTo parameter.');
17+
}
18+
19+
assertType('array{scheme?: string, host?: string, port?: int<0, 65535>, user?: string, pass?: string, path?: string, query?: string, fragment?: string}', $parsedUrl);
20+
21+
$redirectUrl = $parsedUrl['path'];
22+
23+
if (array_key_exists('query', $parsedUrl)) {
24+
assertType('array{scheme?: string, host?: string, port?: int<0, 65535>, user?: string, pass?: string, path?: string, query: string, fragment?: string}', $parsedUrl);
25+
$redirectUrl .= '?' . $parsedUrl['query'];
26+
}
27+
28+
if (array_key_exists('fragment', $parsedUrl)) {
29+
assertType('array{scheme?: string, host?: string, port?: int<0, 65535>, user?: string, pass?: string, path?: string, query?: string, fragment: string}', $parsedUrl);
30+
$redirectUrl .= '#' . $parsedUrl['query'];
31+
}
32+
33+
assertType('array{scheme?: string, host?: string, port?: int<0, 65535>, user?: string, pass?: string, path?: string, query?: string, fragment?: string}', $parsedUrl);
34+
35+
return $redirectUrl;
36+
}
37+
38+
public function doFoo(int $i)
39+
{
40+
$a = ['a' => $i];
41+
if (rand(0, 1)) {
42+
$a['b'] = $i;
43+
}
44+
45+
if (rand(0,1)) {
46+
$a = ['d' => $i];
47+
}
48+
49+
assertType('array{a: int, b?: int}|array{d: int}', $a);
50+
}
51+
}

tests/PHPStan/Analyser/nsrt/bug-2001.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<?php
1+
<?php // lint < 8.0
22

33
namespace Bug2001;
44

@@ -16,21 +16,21 @@ public function parseUrl(string $url): string
1616
throw new \RuntimeException('Absolute URLs are prohibited for the redirectTo parameter.');
1717
}
1818

19-
assertType('array{scheme?: string, host?: string, port?: int<0, 65535>, user?: string, pass?: string, path?: string, query?: string, fragment?: string}', $parsedUrl);
19+
assertType('array{scheme?: string, port?: int<0, 65535>, user?: string, pass?: string, path?: string, query?: string, fragment?: string}|false', $parsedUrl);
2020

2121
$redirectUrl = $parsedUrl['path'];
2222

2323
if (array_key_exists('query', $parsedUrl)) {
24-
assertType('array{scheme?: string, host?: string, port?: int<0, 65535>, user?: string, pass?: string, path?: string, query: string, fragment?: string}', $parsedUrl);
24+
assertType('array{scheme?: string, port?: int<0, 65535>, user?: string, pass?: string, path?: string, query: string, fragment?: string}', $parsedUrl);
2525
$redirectUrl .= '?' . $parsedUrl['query'];
2626
}
2727

2828
if (array_key_exists('fragment', $parsedUrl)) {
29-
assertType('array{scheme?: string, host?: string, port?: int<0, 65535>, user?: string, pass?: string, path?: string, query?: string, fragment: string}', $parsedUrl);
29+
assertType('array{scheme?: string, port?: int<0, 65535>, user?: string, pass?: string, path?: string, query?: string, fragment: string}', $parsedUrl);
3030
$redirectUrl .= '#' . $parsedUrl['query'];
3131
}
3232

33-
assertType('array{scheme?: string, host?: string, port?: int<0, 65535>, user?: string, pass?: string, path?: string, query?: string, fragment?: string}', $parsedUrl);
33+
assertType('array{scheme?: string, port?: int<0, 65535>, user?: string, pass?: string, path?: string, query?: string, fragment?: string}|false', $parsedUrl);
3434

3535
return $redirectUrl;
3636
}

0 commit comments

Comments
 (0)