From f8d906be103475d681900d1916fd8adb72c20d21 Mon Sep 17 00:00:00 2001 From: Manish Goregaokar Date: Mon, 30 Nov 2015 21:20:19 +0530 Subject: Make `path_matches` match the spec (fixes cookies) --- components/net/cookie.rs | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'components/net/cookie.rs') diff --git a/components/net/cookie.rs b/components/net/cookie.rs index c0f6b1645f6..b496eb7256e 100644 --- a/components/net/cookie.rs +++ b/components/net/cookie.rs @@ -113,10 +113,21 @@ impl Cookie { // http://tools.ietf.org/html/rfc6265#section-5.1.4 pub fn path_match(request_path: &str, cookie_path: &str) -> bool { + // A request-path path-matches a given cookie-path if at least one of + // the following conditions holds: + + // The cookie-path and the request-path are identical. request_path == cookie_path || - ( request_path.starts_with(cookie_path) && - ( request_path.ends_with("/") || request_path[cookie_path.len()..].starts_with("/")) - ) + + (request_path.starts_with(cookie_path) && ( + // The cookie-path is a prefix of the request-path, and the last + // character of the cookie-path is %x2F ("/"). + cookie_path.ends_with("/") || + // The cookie-path is a prefix of the request-path, and the first + // character of the request-path that is not included in the cookie- + // path is a %x2F ("/") character. + request_path[cookie_path.len()..].starts_with("/") + )) } // http://tools.ietf.org/html/rfc6265#section-5.1.3 -- cgit v1.2.3