From 91a347bf6d549ba543f1b4bfdc2a05f269c975c8 Mon Sep 17 00:00:00 2001 From: Allen Wild Date: Sun, 2 May 2021 14:58:12 -0400 Subject: [PATCH] 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. --- src/less.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) 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) -> Option { fn parse_less_version(output: &[u8]) -> Option { 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::().ok() } else { None @@ -57,6 +57,19 @@ Home page: http://www.greenwoodsoftware.com/less"; assert_eq!(Some(551), parse_less_version(output)); } +#[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";