]> Cypherpunks.ru repositories - gostls13.git/commit
net/http: fix bugs in comparePaths and combineRelationships
authorJonathan Amsterdam <jba@google.com>
Mon, 18 Sep 2023 17:55:42 +0000 (13:55 -0400)
committerJonathan Amsterdam <jba@google.com>
Mon, 18 Sep 2023 20:42:07 +0000 (20:42 +0000)
commitcc904eb0e87a00430bec8d1918f649638553e5de
treec9da1aee17e1663475c1c0c8f422f2753a4877b8
parent5b123aeaf5af3044cefeaaeac496443f85344983
net/http: fix bugs in comparePaths and combineRelationships

combineRelationships was wrong on one case: if one part of a pattern
overlaps and the other is disjoint, the result is disjoint, not overlaps.
For example:

    /a/{x}/c
    /{x}/b/d

Here the prefix consisting of the first two segments overlaps, but the
third segments are disjoint. The patterns as a whole are disjoint.

comparePaths was wrong in a couple of ways:

First, the loop shouldn't exit early when it sees an overlap,
for the reason above: later information may change that.

Once the loop was allowed to continue, we had to handle the "overlaps"
case at the end. The insight there, which generalized the existing
code, is that if the shorter path ends in a multi, that multi matches
the remainder of the longer path and more. (It must be "and more": the
longer path has at least two segments, so it couldn't match one
segment while the shorter path's multi can.) That means we can treat
the result as the combination moreGeneral and the relationship of the
common prefix.

Change-Id: I11dab2c020d820730fb38296d9d6b072bd2a5350
Reviewed-on: https://go-review.googlesource.com/c/go/+/529119
Reviewed-by: Damien Neil <dneil@google.com>
Run-TryBot: Jonathan Amsterdam <jba@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
src/net/http/pattern.go
src/net/http/pattern_test.go