소스 검색

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.
Rich Felker 12 년 전
부모
커밋
5afc74fbaa
1개의 변경된 파일3개의 추가작업 그리고 1개의 파일을 삭제
  1. 3 1
      src/string/strverscmp.c

+ 3 - 1
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);