@@ -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