take_until_and_consume!("(") >>
digit >> tag!(",") >> digit >> tag!(",") >>
digit >> tag!(",") >> digit >> tag!(",") >>
- part1: getu16 >>
+ part1: verify!(getu16, |v| v <= std::u8::MAX as u16) >>
tag!(",") >>
- part2: getu16 >>
+ part2: verify!(getu16, |v| v <= std::u8::MAX as u16) >>
alt! (tag!(").") | tag!(")")) >>
(
part1 * 256 + part2
}
return 0;
}
+
+#[cfg(test)]
+mod test {
+ use super::*;
+
+ #[test]
+ fn test_pasv_response_valid() {
+ let port = ftp_pasv_response("227 Entering Passive Mode (212,27,32,66,221,243).".as_bytes());
+ assert_eq!(port, Ok((&b""[..], 56819)));
+ }
+
+ // A port that is too large for a u16.
+ #[test]
+ fn test_pasv_response_too_large() {
+ let port = ftp_pasv_response("227 Entering Passive Mode (212,27,32,66,257,243).".as_bytes());
+ assert!(port.is_err());
+
+ let port = ftp_pasv_response("227 Entering Passive Mode (212,27,32,66,255,65535).".as_bytes());
+ assert!(port.is_err());
+ }
+}