Skip to content

Commit acdd212

Browse files
perf: reduce CRL extractor regex and dedup overhead
Signed-off-by: Vitor Mattos <[email protected]>
1 parent 2c99c07 commit acdd212

1 file changed

Lines changed: 17 additions & 11 deletions

File tree

lib/Service/Crl/CrlDistributionPointsExtractor.php

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,8 @@ final class CrlDistributionPointsExtractor {
2525
*/
2626
public function extractFromExtensions(array $extensions): array {
2727
$hasCrlExtension = false;
28-
$urls = [];
28+
$orderedUrls = [];
29+
$seenUrls = [];
2930
foreach ($extensions as $extensionName => $extensionValue) {
3031
if (!is_string($extensionName)) {
3132
continue;
@@ -38,11 +39,11 @@ public function extractFromExtensions(array $extensions): array {
3839
$hasCrlExtension = true;
3940

4041
if (is_string($extensionValue)) {
41-
$this->appendUrlsFromText($extensionValue, $urls);
42+
$this->appendUrlsFromText($extensionValue, $orderedUrls, $seenUrls);
4243
} elseif (is_array($extensionValue)) {
4344
foreach ($extensionValue as $extensionPart) {
4445
if (is_string($extensionPart)) {
45-
$this->appendUrlsFromText($extensionPart, $urls);
46+
$this->appendUrlsFromText($extensionPart, $orderedUrls, $seenUrls);
4647
}
4748
}
4849
}
@@ -52,29 +53,34 @@ public function extractFromExtensions(array $extensions): array {
5253
return ['hasExtension' => false, 'urls' => []];
5354
}
5455

55-
/** @var list<string> $uniqueUrls */
56-
$uniqueUrls = array_values(array_unique($urls));
57-
5856
return [
5957
'hasExtension' => true,
60-
'urls' => $uniqueUrls,
58+
'urls' => $orderedUrls,
6159
];
6260
}
6361

6462
/**
65-
* @param list<string> $urls
63+
* @param list<string> $orderedUrls
64+
* @param array<string, true> $seenUrls
6665
*/
67-
private function appendUrlsFromText(string $value, array &$urls): void {
66+
private function appendUrlsFromText(string $value, array &$orderedUrls, array &$seenUrls): void {
67+
if (stripos($value, 'URI') === false) {
68+
return;
69+
}
70+
6871
preg_match_all(self::URI_PATTERN, $value, $matches);
6972
if (empty($matches[1])) {
7073
return;
7174
}
7275

7376
foreach ($matches[1] as $url) {
7477
$normalizedUrl = $this->normalizeUrlToken($url);
75-
if ($normalizedUrl !== '') {
76-
$urls[] = $normalizedUrl;
78+
if ($normalizedUrl === '' || isset($seenUrls[$normalizedUrl])) {
79+
continue;
7780
}
81+
82+
$seenUrls[$normalizedUrl] = true;
83+
$orderedUrls[] = $normalizedUrl;
7884
}
7985
}
8086

0 commit comments

Comments
 (0)