diff options
author | Allen Wild <allenwild93@gmail.com> | 2021-05-02 14:58:12 -0400 |
---|---|---|
committer | David Peter <sharkdp@users.noreply.github.com> | 2021-05-12 11:47:16 +0200 |
commit | 91a347bf6d549ba543f1b4bfdc2a05f269c975c8 (patch) | |
tree | c23e2052387780fedad2eb19f4c6c075e8014417 | |
parent | e219c8fc03b632272d7a75f30f364fcdcee0a9b0 (diff) |
Fix less version parsing for minor versions of less
Less 581.2 is here, and it has a ".2" in the version string, which can't
be parsed as a usize.
Update the check to find a non-digit character rather than a space. This
ignores the minor version, but parses the major version correctly.
-rw-r--r-- | src/less.rs | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/less.rs b/src/less.rs index 34b57549..f1adca81 100644 --- a/src/less.rs +++ b/src/less.rs @@ -11,7 +11,7 @@ pub fn retrieve_less_version(less_path: &dyn AsRef<OsStr>) -> Option<usize> { fn parse_less_version(output: &[u8]) -> Option<usize> { if output.starts_with(b"less ") { let version = std::str::from_utf8(&output[5..]).ok()?; - let end = version.find(' ')?; + let end = version.find(|c: char| !c.is_ascii_digit())?; version[..end].parse::<usize>().ok() } else { None @@ -58,6 +58,19 @@ Home page: http://www.greenwoodsoftware.com/less"; } #[test] +fn test_parse_less_version_581_2() { + let output = b"less 581.2 (PCRE2 regular expressions) +Copyright (C) 1984-2021 Mark Nudelman + +less comes with NO WARRANTY, to the extent permitted by law. +For information about the terms of redistribution, +see the file named README in the less distribution. +Home page: https://greenwoodsoftware.com/less"; + + assert_eq!(Some(581), parse_less_version(output)); +} + +#[test] fn test_parse_less_version_wrong_program() { let output = b"more from util-linux 2.34"; |