From 9caef8cd93836a8ceb8fd143e25da20db0fa27c8 Mon Sep 17 00:00:00 2001 From: Samuel Mimram Date: Wed, 1 Jan 2025 13:27:18 +0100 Subject: [PATCH 1/3] Fix parsing of rolling-release version. - allow "rolling-release-v" as prefix to the version - consider "x" in the version number as -1 Fixes #4287. --- src/lang/lang_string.ml | 7 +++++-- tests/core/string_test.ml | 3 +++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/lang/lang_string.ml b/src/lang/lang_string.ml index 6147d5c0c3..661bedac63 100644 --- a/src/lang/lang_string.ml +++ b/src/lang/lang_string.ml @@ -352,11 +352,14 @@ module Version = struct (* We assume something like, 2.0.0+git@7e211ffd *) let of_string s : t = - let rex = Re.Pcre.regexp "([\\.\\d]+)([^\\.]+)?" in + let rex = Re.Pcre.regexp "(?:rolling-release-v)?([\\.\\dx]+)([^\\.]+)?" in let sub = Re.Pcre.exec ~rex s in let num = Re.Pcre.get_substring sub 1 in let str = try Re.Pcre.get_substring sub 2 with _ -> "" in - let num = String.split_on_char '.' num |> List.map int_of_string in + let num = + let int_of_string s = if s = "x" then (-1) else int_of_string s in + String.split_on_char '.' num |> List.map int_of_string + in (num, str) (** Number part. *) diff --git a/tests/core/string_test.ml b/tests/core/string_test.ml index 44d72b8b26..c3e9570974 100644 --- a/tests/core/string_test.ml +++ b/tests/core/string_test.ml @@ -1 +1,4 @@ let () = assert ("aa\\\"bb" = Lang_string.escape_utf8_string "aa\"bb") + +(* Bug #4287 *) +let () = ignore (Lang_string.Version.of_string "rolling-release-v2.3.x+git@2addd93da") From 0be682f24f4da90ae40b86fb9941e8acc725044d Mon Sep 17 00:00:00 2001 From: Romain Beauxis Date: Wed, 1 Jan 2025 12:39:15 -0600 Subject: [PATCH 2/3] Format. --- src/lang/lang_string.ml | 2 +- tests/core/string_test.ml | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/lang/lang_string.ml b/src/lang/lang_string.ml index 661bedac63..beee459adf 100644 --- a/src/lang/lang_string.ml +++ b/src/lang/lang_string.ml @@ -357,7 +357,7 @@ module Version = struct let num = Re.Pcre.get_substring sub 1 in let str = try Re.Pcre.get_substring sub 2 with _ -> "" in let num = - let int_of_string s = if s = "x" then (-1) else int_of_string s in + let int_of_string s = if s = "x" then -1 else int_of_string s in String.split_on_char '.' num |> List.map int_of_string in (num, str) diff --git a/tests/core/string_test.ml b/tests/core/string_test.ml index c3e9570974..7c66caf607 100644 --- a/tests/core/string_test.ml +++ b/tests/core/string_test.ml @@ -1,4 +1,5 @@ let () = assert ("aa\\\"bb" = Lang_string.escape_utf8_string "aa\"bb") (* Bug #4287 *) -let () = ignore (Lang_string.Version.of_string "rolling-release-v2.3.x+git@2addd93da") +let () = + ignore (Lang_string.Version.of_string "rolling-release-v2.3.x+git@2addd93da") From 4e68eb9ca020f46128244c2a3416f461af1c2080 Mon Sep 17 00:00:00 2001 From: Romain Beauxis Date: Wed, 1 Jan 2025 12:40:23 -0600 Subject: [PATCH 3/3] Update src/lang/lang_string.ml --- src/lang/lang_string.ml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lang/lang_string.ml b/src/lang/lang_string.ml index beee459adf..30e30dcd48 100644 --- a/src/lang/lang_string.ml +++ b/src/lang/lang_string.ml @@ -357,7 +357,7 @@ module Version = struct let num = Re.Pcre.get_substring sub 1 in let str = try Re.Pcre.get_substring sub 2 with _ -> "" in let num = - let int_of_string s = if s = "x" then -1 else int_of_string s in + let int_of_string s = if s = "x" then max_int else int_of_string s in String.split_on_char '.' num |> List.map int_of_string in (num, str)