From 5afc74fbaa2371f30df0dc9fb7bc3afe6bd96137 Mon Sep 17 00:00:00 2001
From: Rich Felker <dalias@aerifal.cx>
Date: Tue, 26 Feb 2013 01:42:11 -0500
Subject: fix integer type issue in strverscmp

lenl-lenr is not a valid expression for a signed int return value from
strverscmp, since after implicit conversion from size_t to int this
difference could have the wrong sign or might even be zero. using the
difference for char values works since they're bounded well within the
range of differences representable by int, but it does not work for
size_t values.
---
 src/string/strverscmp.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

(limited to 'src')

diff --git a/src/string/strverscmp.c b/src/string/strverscmp.c
index 33a42eed..94d2e15c 100644
--- a/src/string/strverscmp.c
+++ b/src/string/strverscmp.c
@@ -31,8 +31,10 @@ int strverscmp(const char *l, const char *r)
 		while (isdigit(r[lenr]) ) lenr++;
 		if (lenl==lenr) {
 			return (*l -  *r);
+		} else if (lenl>lenr) {
+			return 1;
 		} else {
-			return (lenl - lenr);
+			return -1;
 		}
 	} else {
 		return (*l -  *r);
-- 
cgit v1.2.3-70-g09d2