summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAllen Wild <allenwild93@gmail.com>2021-05-02 14:58:12 -0400
committerDavid Peter <sharkdp@users.noreply.github.com>2021-05-12 11:47:16 +0200
commit91a347bf6d549ba543f1b4bfdc2a05f269c975c8 (patch)
treec23e2052387780fedad2eb19f4c6c075e8014417
parente219c8fc03b632272d7a75f30f364fcdcee0a9b0 (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.rs15
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";