Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release 2.4.5 #557

Merged
merged 2 commits into from Apr 17, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 8 additions & 0 deletions CHANGELOG.md
Expand Up @@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## Unreleased

## 2.4.5 - 2023-04-17

### Fixed

- Prevent possible warnings on unset variables in `ServerRequest::normalizeNestedFileSpec`
- Fixed `Message::bodySummary` when `preg_match` fails
- Fixed header validation issue

## 2.4.4 - 2023-03-09

### Changed
Expand Down
13 changes: 6 additions & 7 deletions src/MessageTrait.php
Expand Up @@ -224,12 +224,9 @@ private function assertHeader($header): void
));
}

if (! preg_match('/^[a-zA-Z0-9\'`#$%&*+.^_|~!-]+$/', $header)) {
if (! preg_match('/^[a-zA-Z0-9\'`#$%&*+.^_|~!-]+$/D', $header)) {
throw new \InvalidArgumentException(
sprintf(
'"%s" is not valid header name',
$header
)
sprintf('"%s" is not valid header name.', $header)
);
}
}
Expand Down Expand Up @@ -257,8 +254,10 @@ private function assertValue(string $value): void
// Clients must not send a request with line folding and a server sending folded headers is
// likely very rare. Line folding is a fairly obscure feature of HTTP/1.1 and thus not accepting
// folding is not likely to break any legitimate use case.
if (! preg_match('/^[\x20\x09\x21-\x7E\x80-\xFF]*$/', $value)) {
throw new \InvalidArgumentException(sprintf('"%s" is not valid header value', $value));
if (! preg_match('/^[\x20\x09\x21-\x7E\x80-\xFF]*$/D', $value)) {
throw new \InvalidArgumentException(
sprintf('"%s" is not valid header value.', $value)
);
}
}
}
5 changes: 5 additions & 0 deletions tests/RequestTest.php
Expand Up @@ -332,6 +332,10 @@ public function provideHeaderValuesContainingNotAllowedChars(): iterable
// Line folding is technically allowed, but deprecated.
// We don't support it.
["new\r\n line"],
["newline\n"],
["\nnewline"],
["newline\r\n"],
["\r\nnewline"],
];

for ($i = 0; $i <= 0xff; $i++) {
Expand All @@ -349,6 +353,7 @@ public function provideHeaderValuesContainingNotAllowedChars(): iterable
}

$tests[] = ["foo" . \chr($i) . "bar"];
$tests[] = ["foo" . \chr($i)];
}

return $tests;
Expand Down
9 changes: 9 additions & 0 deletions tests/ResponseTest.php
Expand Up @@ -288,6 +288,15 @@ public function invalidWithHeaderProvider(): iterable
yield [[], 'foo', 'Header name must be a string but array provided.'];
yield [false, 'foo', 'Header name must be a string but boolean provided.'];
yield [new \stdClass(), 'foo', 'Header name must be a string but stdClass provided.'];
yield ['', 'foo', "\"\" is not valid header name."];
yield ["Content-Type\r\n\r\n", 'foo', "\"Content-Type\r\n\r\n\" is not valid header name."];
yield ["Content-Type\r\n", 'foo', "\"Content-Type\r\n\" is not valid header name."];
yield ["Content-Type\n", 'foo', "\"Content-Type\n\" is not valid header name."];
yield ["\r\nContent-Type", 'foo', "\"\r\nContent-Type\" is not valid header name."];
yield ["\nContent-Type", 'foo', "\"\nContent-Type\" is not valid header name."];
yield ["\n", 'foo', "\"\n\" is not valid header name."];
yield ["\r\n", 'foo', "\"\r\n\" is not valid header name."];
yield ["\t", 'foo', "\"\t\" is not valid header name."];
}

public function testHeaderValuesAreTrimmed(): void
Expand Down