mirror of
https://github.com/fafhrd91/actix-net
synced 2024-12-02 19:52:24 +01:00
path.len()
!= path.path().len()
(#368)
Co-authored-by: Rob Ede <robjtede@icloud.com>
This commit is contained in:
parent
dcea009158
commit
e1317bb3a0
@ -1,6 +1,9 @@
|
|||||||
# Changes
|
# Changes
|
||||||
|
|
||||||
## Unreleased - 2021-xx-xx
|
## Unreleased - 2021-xx-xx
|
||||||
|
* Fix segment interpolation leaving `Path` in unintended state after matching. [#368]
|
||||||
|
|
||||||
|
[#368]: https://github.com/actix/actix-net/pull/368
|
||||||
|
|
||||||
|
|
||||||
## 0.4.0 - 2021-06-06
|
## 0.4.0 - 2021-06-06
|
||||||
|
@ -235,7 +235,7 @@ impl ResourceDef {
|
|||||||
if s != path.path() {
|
if s != path.path() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
(path.len(), None)
|
(path.path().len(), None)
|
||||||
}
|
}
|
||||||
PatternType::Prefix(ref s) => {
|
PatternType::Prefix(ref s) => {
|
||||||
let len = {
|
let len = {
|
||||||
@ -254,7 +254,7 @@ impl ResourceDef {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
(min(path.len(), len), None)
|
(min(path.path().len(), len), None)
|
||||||
}
|
}
|
||||||
PatternType::Dynamic(ref re, ref names) => {
|
PatternType::Dynamic(ref re, ref names) => {
|
||||||
let captures = match re.captures(path.path()) {
|
let captures = match re.captures(path.path()) {
|
||||||
@ -500,6 +500,10 @@ mod tests {
|
|||||||
assert!(!re.is_match("/name/"));
|
assert!(!re.is_match("/name/"));
|
||||||
assert!(!re.is_match("/name~"));
|
assert!(!re.is_match("/name~"));
|
||||||
|
|
||||||
|
let mut path = Path::new("/name");
|
||||||
|
assert!(re.match_path(&mut path));
|
||||||
|
assert_eq!(path.unprocessed(), "");
|
||||||
|
|
||||||
assert_eq!(re.is_prefix_match("/name"), Some(5));
|
assert_eq!(re.is_prefix_match("/name"), Some(5));
|
||||||
assert_eq!(re.is_prefix_match("/name1"), None);
|
assert_eq!(re.is_prefix_match("/name1"), None);
|
||||||
assert_eq!(re.is_prefix_match("/name/"), None);
|
assert_eq!(re.is_prefix_match("/name/"), None);
|
||||||
@ -513,6 +517,10 @@ mod tests {
|
|||||||
let re = ResourceDef::new("/user/profile");
|
let re = ResourceDef::new("/user/profile");
|
||||||
assert!(re.is_match("/user/profile"));
|
assert!(re.is_match("/user/profile"));
|
||||||
assert!(!re.is_match("/user/profile/profile"));
|
assert!(!re.is_match("/user/profile/profile"));
|
||||||
|
|
||||||
|
let mut path = Path::new("/user/profile");
|
||||||
|
assert!(re.match_path(&mut path));
|
||||||
|
assert_eq!(path.unprocessed(), "");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@ -526,10 +534,12 @@ mod tests {
|
|||||||
let mut path = Path::new("/user/profile");
|
let mut path = Path::new("/user/profile");
|
||||||
assert!(re.match_path(&mut path));
|
assert!(re.match_path(&mut path));
|
||||||
assert_eq!(path.get("id").unwrap(), "profile");
|
assert_eq!(path.get("id").unwrap(), "profile");
|
||||||
|
assert_eq!(path.unprocessed(), "");
|
||||||
|
|
||||||
let mut path = Path::new("/user/1245125");
|
let mut path = Path::new("/user/1245125");
|
||||||
assert!(re.match_path(&mut path));
|
assert!(re.match_path(&mut path));
|
||||||
assert_eq!(path.get("id").unwrap(), "1245125");
|
assert_eq!(path.get("id").unwrap(), "1245125");
|
||||||
|
assert_eq!(path.unprocessed(), "");
|
||||||
|
|
||||||
let re = ResourceDef::new("/v{version}/resource/{id}");
|
let re = ResourceDef::new("/v{version}/resource/{id}");
|
||||||
assert!(re.is_match("/v1/resource/320120"));
|
assert!(re.is_match("/v1/resource/320120"));
|
||||||
@ -540,6 +550,7 @@ mod tests {
|
|||||||
assert!(re.match_path(&mut path));
|
assert!(re.match_path(&mut path));
|
||||||
assert_eq!(path.get("version").unwrap(), "151");
|
assert_eq!(path.get("version").unwrap(), "151");
|
||||||
assert_eq!(path.get("id").unwrap(), "adage32");
|
assert_eq!(path.get("id").unwrap(), "adage32");
|
||||||
|
assert_eq!(path.unprocessed(), "");
|
||||||
|
|
||||||
let re = ResourceDef::new("/{id:[[:digit:]]{6}}");
|
let re = ResourceDef::new("/{id:[[:digit:]]{6}}");
|
||||||
assert!(re.is_match("/012345"));
|
assert!(re.is_match("/012345"));
|
||||||
@ -550,6 +561,7 @@ mod tests {
|
|||||||
let mut path = Path::new("/012345");
|
let mut path = Path::new("/012345");
|
||||||
assert!(re.match_path(&mut path));
|
assert!(re.match_path(&mut path));
|
||||||
assert_eq!(path.get("id").unwrap(), "012345");
|
assert_eq!(path.get("id").unwrap(), "012345");
|
||||||
|
assert_eq!(path.unprocessed(), "");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(clippy::cognitive_complexity)]
|
#[allow(clippy::cognitive_complexity)]
|
||||||
@ -568,10 +580,12 @@ mod tests {
|
|||||||
let mut path = Path::new("/user/profile");
|
let mut path = Path::new("/user/profile");
|
||||||
assert!(re.match_path(&mut path));
|
assert!(re.match_path(&mut path));
|
||||||
assert_eq!(path.get("id").unwrap(), "profile");
|
assert_eq!(path.get("id").unwrap(), "profile");
|
||||||
|
assert_eq!(path.unprocessed(), "");
|
||||||
|
|
||||||
let mut path = Path::new("/user/1245125");
|
let mut path = Path::new("/user/1245125");
|
||||||
assert!(re.match_path(&mut path));
|
assert!(re.match_path(&mut path));
|
||||||
assert_eq!(path.get("id").unwrap(), "1245125");
|
assert_eq!(path.get("id").unwrap(), "1245125");
|
||||||
|
assert_eq!(path.unprocessed(), "");
|
||||||
|
|
||||||
assert!(re.is_match("/v1/resource/320120"));
|
assert!(re.is_match("/v1/resource/320120"));
|
||||||
assert!(!re.is_match("/v/resource/1"));
|
assert!(!re.is_match("/v/resource/1"));
|
||||||
@ -704,6 +718,14 @@ mod tests {
|
|||||||
assert!(re.is_match("/name1"));
|
assert!(re.is_match("/name1"));
|
||||||
assert!(re.is_match("/name~"));
|
assert!(re.is_match("/name~"));
|
||||||
|
|
||||||
|
let mut path = Path::new("/name");
|
||||||
|
assert!(re.match_path(&mut path));
|
||||||
|
assert_eq!(path.unprocessed(), "");
|
||||||
|
|
||||||
|
let mut path = Path::new("/name/test");
|
||||||
|
assert!(re.match_path(&mut path));
|
||||||
|
assert_eq!(path.unprocessed(), "/test");
|
||||||
|
|
||||||
assert_eq!(re.is_prefix_match("/name"), Some(5));
|
assert_eq!(re.is_prefix_match("/name"), Some(5));
|
||||||
assert_eq!(re.is_prefix_match("/name/"), Some(5));
|
assert_eq!(re.is_prefix_match("/name/"), Some(5));
|
||||||
assert_eq!(re.is_prefix_match("/name/test/test"), Some(5));
|
assert_eq!(re.is_prefix_match("/name/test/test"), Some(5));
|
||||||
@ -719,6 +741,10 @@ mod tests {
|
|||||||
assert!(re.is_match("/name/"));
|
assert!(re.is_match("/name/"));
|
||||||
assert!(re.is_match("/name/gs"));
|
assert!(re.is_match("/name/gs"));
|
||||||
assert!(!re.is_match("/name"));
|
assert!(!re.is_match("/name"));
|
||||||
|
|
||||||
|
let mut path = Path::new("/name/gs");
|
||||||
|
assert!(re.match_path(&mut path));
|
||||||
|
assert_eq!(path.unprocessed(), "/gs");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@ -736,11 +762,13 @@ mod tests {
|
|||||||
assert!(re.match_path(&mut path));
|
assert!(re.match_path(&mut path));
|
||||||
assert_eq!(&path["name"], "test2");
|
assert_eq!(&path["name"], "test2");
|
||||||
assert_eq!(&path[0], "test2");
|
assert_eq!(&path[0], "test2");
|
||||||
|
assert_eq!(path.unprocessed(), "");
|
||||||
|
|
||||||
let mut path = Path::new("/test2/subpath1/subpath2/index.html");
|
let mut path = Path::new("/test2/subpath1/subpath2/index.html");
|
||||||
assert!(re.match_path(&mut path));
|
assert!(re.match_path(&mut path));
|
||||||
assert_eq!(&path["name"], "test2");
|
assert_eq!(&path["name"], "test2");
|
||||||
assert_eq!(&path[0], "test2");
|
assert_eq!(&path[0], "test2");
|
||||||
|
assert_eq!(path.unprocessed(), "subpath1/subpath2/index.html");
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
Loading…
Reference in New Issue
Block a user