From 37593c1952f4972040f6163da67e3777fd3d2e94 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Fri, 17 May 2024 18:25:38 +0100 Subject: [PATCH] Fast path returns for normalize_path cases (#3189) Co-authored-by: Kar Petrosyan <92274156+karpetrosyan@users.noreply.github.com> --- httpx/_urlparse.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/httpx/_urlparse.py b/httpx/_urlparse.py index 883f0895..575e6d56 100644 --- a/httpx/_urlparse.py +++ b/httpx/_urlparse.py @@ -392,8 +392,17 @@ def normalize_path(path: str) -> str: normalize_path("/path/./to/somewhere/..") == "/path/to" """ - # https://datatracker.ietf.org/doc/html/rfc3986#section-5.2.4 + # Fast return when no '.' characters in the path. + if "." not in path: + return path + components = path.split("/") + + # Fast return when no '.' or '..' components in the path. + if "." not in components and ".." not in components: + return path + + # https://datatracker.ietf.org/doc/html/rfc3986#section-5.2.4 output: list[str] = [] for component in components: if component == ".": -- 2.47.3