Skip to content

Commit 3b56df1

Browse files
[4.3] Made repository checks a little stricter (#541)
1 parent 9f52bcb commit 3b56df1

10 files changed

+114
-55
lines changed

src/Repository/AbstractRepository.php

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ public function __construct($immutable)
4646
*/
4747
public function get($name)
4848
{
49-
if (!is_string($name)) {
50-
throw new InvalidArgumentException('Expected name to be a string.');
49+
if (!is_string($name) || '' === $name) {
50+
throw new InvalidArgumentException('Expected name to be a non-empty string.');
5151
}
5252

5353
return $this->getInternal($name);
@@ -56,7 +56,7 @@ public function get($name)
5656
/**
5757
* Get an environment variable.
5858
*
59-
* @param string $name
59+
* @param non-empty-string $name
6060
*
6161
* @return string|null
6262
*/
@@ -74,8 +74,8 @@ abstract protected function getInternal($name);
7474
*/
7575
public function set($name, $value = null)
7676
{
77-
if (!is_string($name)) {
78-
throw new InvalidArgumentException('Expected name to be a string.');
77+
if (!is_string($name) || '' === $name) {
78+
throw new InvalidArgumentException('Expected name to be a non-empty string.');
7979
}
8080

8181
// Don't overwrite existing environment variables if we're immutable
@@ -91,8 +91,8 @@ public function set($name, $value = null)
9191
/**
9292
* Set an environment variable.
9393
*
94-
* @param string $name
95-
* @param string|null $value
94+
* @param non-empty-string $name
95+
* @param string|null $value
9696
*
9797
* @return void
9898
*/
@@ -109,8 +109,8 @@ abstract protected function setInternal($name, $value = null);
109109
*/
110110
public function clear($name)
111111
{
112-
if (!is_string($name)) {
113-
throw new InvalidArgumentException('Expected name to be a string.');
112+
if (!is_string($name) || '' === $name) {
113+
throw new InvalidArgumentException('Expected name to be a non-empty string.');
114114
}
115115

116116
// Don't clear anything if we're immutable.
@@ -124,7 +124,7 @@ public function clear($name)
124124
/**
125125
* Clear an environment variable.
126126
*
127-
* @param string $name
127+
* @param non-empty-string $name
128128
*
129129
* @return void
130130
*/
@@ -139,7 +139,7 @@ abstract protected function clearInternal($name);
139139
*/
140140
public function has($name)
141141
{
142-
return is_string($name) && $this->get($name) !== null;
142+
return is_string($name) && $name !== '' && $this->get($name) !== null;
143143
}
144144

145145
/**

src/Repository/Adapter/ApacheAdapter.php

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public function isSupported()
2424
* This is intentionally not implemented, since this adapter exists only as
2525
* a means to overwrite existing apache environment variables.
2626
*
27-
* @param string $name
27+
* @param non-empty-string $name
2828
*
2929
* @return \PhpOption\Option<string|null>
3030
*/
@@ -38,22 +38,24 @@ public function get($name)
3838
*
3939
* Only if an existing apache variable exists do we overwrite it.
4040
*
41-
* @param string $name
42-
* @param string|null $value
41+
* @param non-empty-string $name
42+
* @param string|null $value
4343
*
4444
* @return void
4545
*/
4646
public function set($name, $value = null)
4747
{
48-
if (apache_getenv($name) !== false) {
49-
apache_setenv($name, (string) $value);
48+
if (apache_getenv($name) === false) {
49+
return;
5050
}
51+
52+
apache_setenv($name, (string) $value);
5153
}
5254

5355
/**
5456
* Clear an environment variable.
5557
*
56-
* @param string $name
58+
* @param non-empty-string $name
5759
*
5860
* @return void
5961
*/

src/Repository/Adapter/ArrayAdapter.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class ArrayAdapter implements AvailabilityInterface, ReaderInterface, WriterInte
1010
/**
1111
* The variables and their values.
1212
*
13-
* @var array<string,string|null>
13+
* @var array<non-empty-string,string|null>
1414
*/
1515
private $variables = [];
1616

@@ -27,24 +27,24 @@ public function isSupported()
2727
/**
2828
* Get an environment variable, if it exists.
2929
*
30-
* @param string $name
30+
* @param non-empty-string $name
3131
*
3232
* @return \PhpOption\Option<string|null>
3333
*/
3434
public function get($name)
3535
{
36-
if (array_key_exists($name, $this->variables)) {
37-
return Some::create($this->variables[$name]);
36+
if (!array_key_exists($name, $this->variables)) {
37+
return None::create();
3838
}
3939

40-
return None::create();
40+
return Some::create($this->variables[$name]);
4141
}
4242

4343
/**
4444
* Set an environment variable.
4545
*
46-
* @param string $name
47-
* @param string|null $value
46+
* @param non-empty-string $name
47+
* @param string|null $value
4848
*
4949
* @return void
5050
*/
@@ -56,7 +56,7 @@ public function set($name, $value = null)
5656
/**
5757
* Clear an environment variable.
5858
*
59-
* @param string $name
59+
* @param non-empty-string $name
6060
*
6161
* @return void
6262
*/

src/Repository/Adapter/EnvConstAdapter.php

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,26 @@ public function isSupported()
2020
/**
2121
* Get an environment variable, if it exists.
2222
*
23-
* @param string $name
23+
* @param non-empty-string $name
2424
*
2525
* @return \PhpOption\Option<string|null>
2626
*/
2727
public function get($name)
2828
{
29-
if (array_key_exists($name, $_ENV)) {
30-
return Some::create($_ENV[$name]);
29+
if (!array_key_exists($name, $_ENV)) {
30+
return None::create();
31+
}
32+
33+
$value = $_ENV[$name];
34+
35+
if (is_scalar($value)) {
36+
/** @var \PhpOption\Option<string|null> */
37+
return Some::create((string) $value);
38+
}
39+
40+
if (null === $value) {
41+
/** @var \PhpOption\Option<string|null> */
42+
return Some::create(null);
3143
}
3244

3345
return None::create();
@@ -36,8 +48,8 @@ public function get($name)
3648
/**
3749
* Set an environment variable.
3850
*
39-
* @param string $name
40-
* @param string|null $value
51+
* @param non-empty-string $name
52+
* @param string|null $value
4153
*
4254
* @return void
4355
*/
@@ -49,7 +61,7 @@ public function set($name, $value = null)
4961
/**
5062
* Clear an environment variable.
5163
*
52-
* @param string $name
64+
* @param non-empty-string $name
5365
*
5466
* @return void
5567
*/

src/Repository/Adapter/PutenvAdapter.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ public function isSupported()
1919
/**
2020
* Get an environment variable, if it exists.
2121
*
22-
* @param string $name
22+
* @param non-empty-string $name
2323
*
2424
* @return \PhpOption\Option<string|null>
2525
*/
@@ -32,8 +32,8 @@ public function get($name)
3232
/**
3333
* Set an environment variable.
3434
*
35-
* @param string $name
36-
* @param string|null $value
35+
* @param non-empty-string $name
36+
* @param string|null $value
3737
*
3838
* @return void
3939
*/
@@ -45,7 +45,7 @@ public function set($name, $value = null)
4545
/**
4646
* Clear an environment variable.
4747
*
48-
* @param string $name
48+
* @param non-empty-string $name
4949
*
5050
* @return void
5151
*/

src/Repository/Adapter/ReaderInterface.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ interface ReaderInterface extends AvailabilityInterface
77
/**
88
* Get an environment variable, if it exists.
99
*
10-
* @param string $name
10+
* @param non-empty-string $name
1111
*
1212
* @return \PhpOption\Option<string|null>
1313
*/

src/Repository/Adapter/ServerConstAdapter.php

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,26 @@ public function isSupported()
2020
/**
2121
* Get an environment variable, if it exists.
2222
*
23-
* @param string $name
23+
* @param non-empty-string $name
2424
*
2525
* @return \PhpOption\Option<string|null>
2626
*/
2727
public function get($name)
2828
{
29-
if (array_key_exists($name, $_SERVER)) {
30-
return Some::create($_SERVER[$name]);
29+
if (!array_key_exists($name, $_SERVER)) {
30+
return None::create();
31+
}
32+
33+
$value = $_SERVER[$name];
34+
35+
if (is_scalar($value)) {
36+
/** @var \PhpOption\Option<string|null> */
37+
return Some::create((string) $value);
38+
}
39+
40+
if (null === $value) {
41+
/** @var \PhpOption\Option<string|null> */
42+
return Some::create(null);
3143
}
3244

3345
return None::create();
@@ -36,8 +48,8 @@ public function get($name)
3648
/**
3749
* Set an environment variable.
3850
*
39-
* @param string $name
40-
* @param string|null $value
51+
* @param non-empty-string $name
52+
* @param string|null $value
4153
*
4254
* @return void
4355
*/
@@ -49,7 +61,7 @@ public function set($name, $value = null)
4961
/**
5062
* Clear an environment variable.
5163
*
52-
* @param string $name
64+
* @param non-empty-string $name
5365
*
5466
* @return void
5567
*/

src/Repository/Adapter/WriterInterface.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ interface WriterInterface extends AvailabilityInterface
77
/**
88
* Set an environment variable.
99
*
10-
* @param string $name
11-
* @param string|null $value
10+
* @param non-empty-string $name
11+
* @param string|null $value
1212
*
1313
* @return void
1414
*/
@@ -17,7 +17,7 @@ public function set($name, $value = null);
1717
/**
1818
* Clear an environment variable.
1919
*
20-
* @param string $name
20+
* @param non-empty-string $name
2121
*
2222
* @return void
2323
*/

src/Repository/AdapterRepository.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public function __construct(array $readers, array $writers, $immutable)
3939
*
4040
* We do this by querying our readers sequentially.
4141
*
42-
* @param string $name
42+
* @param non-empty-string $name
4343
*
4444
* @return string|null
4545
*/
@@ -58,8 +58,8 @@ protected function getInternal($name)
5858
/**
5959
* Set an environment variable.
6060
*
61-
* @param string $name
62-
* @param string|null $value
61+
* @param non-empty-string $name
62+
* @param string|null $value
6363
*
6464
* @return void
6565
*/
@@ -73,7 +73,7 @@ protected function setInternal($name, $value = null)
7373
/**
7474
* Clear an environment variable.
7575
*
76-
* @param string $name
76+
* @param non-empty-string $name
7777
*
7878
* @return void
7979
*/

0 commit comments

Comments
 (0)