From 69b0a0db7f955551336d030e3c09b35431493abd Mon Sep 17 00:00:00 2001 From: Marius Tolzmann Date: Wed, 10 Apr 2013 19:18:37 +0200 Subject: [PATCH] bee_version_compare: Fix leading zero comparision fix a bug where pkg-1.02.3-0 was considered equal to pkg-1.2.4-0 because leading zeros caused the the algorithm to ignore and not compare the rest of the string after detecting leading zeros. --- src/bee_version_compare.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/bee_version_compare.c b/src/bee_version_compare.c index b43f1c4..8257f2a 100644 --- a/src/bee_version_compare.c +++ b/src/bee_version_compare.c @@ -41,6 +41,24 @@ int compare_version_strings(char *v1, char *v2) { while(*a && *b && *a == *b) { a++; b++; + + if (*a == *b) + continue; + + /* skip leading zeros of numbers != 0 */ + if (isdigit(*a) && isdigit(*b)) { + char *c; + + for (c=a; *c == '0'; c++) + ; + if (isdigit(*c)) + a = c; + + for (c=b; *c == '0'; c++) + ; + if (isdigit(*c)) + b = c; + } } /* strings are equal ; *a==*b==0*/ @@ -51,7 +69,8 @@ int compare_version_strings(char *v1, char *v2) { if(isdigit(*b)) { /* rewind string to first digit */ /* e.g. to compare 12 vs 100 and not 2 vs 00 */ - while(a > v1 && isdigit(*(a-1))) { + while(a > v1 && isdigit(*(a-1)) && + b > v2 && isdigit(*(b-1))) { a--; b--; }