diff --git a/lib/filevercmp.c b/lib/filevercmp.c index fca23ec4f..fdb4184d4 100644 --- a/lib/filevercmp.c +++ b/lib/filevercmp.c @@ -37,22 +37,24 @@ match_suffix (const char **str) bool read_alpha = false; while (**str) { - if (read_alpha) + if ('.' == **str) + { + if (!match || read_alpha) + match = *str; + read_alpha = true; + } + else if (read_alpha) { read_alpha = false; if (!c_isalpha (**str) && '~' != **str) match = NULL; } - else if ('.' == **str) - { - read_alpha = true; - if (!match) - match = *str; - } else if (!c_isalnum (**str) && '~' != **str) match = NULL; (*str)++; } + if (read_alpha) + return NULL; return match; } diff --git a/tests/test-filevercmp.c b/tests/test-filevercmp.c index d6c65fad9..a8496ec99 100644 --- a/tests/test-filevercmp.c +++ b/tests/test-filevercmp.c @@ -51,6 +51,10 @@ static const char *const examples[] = "a.b", "a.bc~", "a.bc", + "a+", + "a.", + "a..a", + "a.+", "b~", "b", "gcc-c++-10.fc9.tar.gz",