Skip to content

Commit

Permalink
Only pass strings into component compiling steps
Browse files Browse the repository at this point in the history
Currently, some steps in "initialize a URLPattern" access potentially nonexistent entries in the processedInit map, and expect "compile a component" to receive these as null, even though it requires a string.

Instead, these entries are now always populated after calling "process a URLPatternInit" so that subsequent steps can depend on a valid string.

Since the comparison with the default port requires that the two types be the same, fix that too.

Fixes #209.
  • Loading branch information
jeremyroman authored Jan 30, 2024
1 parent 1259680 commit ddd41db
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions spec.bs
Original file line number Diff line number Diff line change
Expand Up @@ -360,7 +360,9 @@ Each {{URLPattern}} object has an associated <dfn for=URLPattern>hash component<
1. If |baseURL| is not null, then throw a {{TypeError}}.
1. Set |init| to |input|.
1. Let |processedInit| be the result of [=process a URLPatternInit=] given |init|, "`pattern`", null, null, null, null, null, null, null, and null.
1. If |processedInit|["{{URLPatternInit/protocol}}"] is a [=special scheme=] and |processedInit|["{{URLPatternInit/port}}"] is its corresponding [=default port=], then set |processedInit|["{{URLPatternInit/port}}"] to the empty string.
1. [=list/For each=] |componentName| of « "{{URLPatternInit/protocol}}", "{{URLPatternInit/username}}", "{{URLPatternInit/password}}", "{{URLPatternInit/hostname}}", "{{URLPatternInit/port}}", "{{URLPatternInit/pathname}}", "{{URLPatternInit/search}}", "{{URLPatternInit/hash}}" »:
1. If |processedInit|[|componentName|] does not [=map/exist=], then [=map/set=] |processedInit|[|componentName|] to "`*`".
1. If |processedInit|["{{URLPatternInit/protocol}}"] is a [=special scheme=] and |processedInit|["{{URLPatternInit/port}}"] is a string which represents its corresponding [=default port=] in radix-10 using [=ASCII digits=] then set |processedInit|["{{URLPatternInit/port}}"] to the empty string.
1. Set |this|'s [=URLPattern/protocol component=] to the result of [=compiling a component=] given |processedInit|["{{URLPatternInit/protocol}}"], [=canonicalize a protocol=], and [=default options=].
1. Set |this|'s [=URLPattern/username component=] to the result of [=compiling a component=] given |processedInit|["{{URLPatternInit/username}}"], [=canonicalize a username=], and [=default options=].
1. Set |this|'s [=URLPattern/password component=] to the result of [=compiling a component=] given |processedInit|["{{URLPatternInit/password}}"], [=canonicalize a password=], and [=default options=].
Expand Down Expand Up @@ -460,7 +462,6 @@ A [=component=] has an associated <dfn for=component>has regexp groups</dfn>, a
<div algorithm>
To <dfn>compile a component</dfn> given a string |input|, [=/encoding callback=] |encoding callback|, and [=/options=] |options|:

1. If |input| is null, then set |input| to "`*`".
1. Let |part list| be the result of running [=parse a pattern string=] given |input|, |options|, and |encoding callback|.
1. Let (|regular expression string|, |name list|) be the result of running [=generate a regular expression and name list=] given |part list| and |options|.
1. Let |flags| be an empty string.
Expand Down

0 comments on commit ddd41db

Please sign in to comment.