diff options
author | Richard Mudgett <rmudgett@digium.com> | 2015-12-14 15:25:02 -0600 |
---|---|---|
committer | Richard Mudgett <rmudgett@digium.com> | 2015-12-14 16:18:30 -0600 |
commit | 36097a185db00230a89f019b9b8ee2d478cc6665 (patch) | |
tree | d970f376e0214b11f9ca921456860ea5cdec84b5 | |
parent | 77ac79b175437f3c37f4980cdea6d240a1b26335 (diff) |
Fix sscanf() format string type mismatch.
ASTERISK-25615
Reported by: George Joseph
Change-Id: Ieff35307254ca193f3d473cff2e396ca57c7ce0b
-rw-r--r-- | include/asterisk/utils.h | 7 | ||||
-rw-r--r-- | main/utils.c | 35 |
2 files changed, 23 insertions, 19 deletions
diff --git a/include/asterisk/utils.h b/include/asterisk/utils.h index cfb78c027..c7a473732 100644 --- a/include/asterisk/utils.h +++ b/include/asterisk/utils.h @@ -1105,9 +1105,10 @@ int ast_file_is_readable(const char *filename); * * \param version1. * \param version2. - * \return -1 if version 1 < version 2. - * \return 0 if version 1 = version 2. - * \return 1 if version 1 > version 2. + * + * \return <0 if version 1 < version 2. + * \return =0 if version 1 = version 2. + * \return >0 if version 1 > version 2. */ int ast_compare_versions(const char *version1, const char *version2); diff --git a/main/utils.c b/main/utils.c index f06b16cdc..3a8d46ae4 100644 --- a/main/utils.c +++ b/main/utils.c @@ -2958,23 +2958,26 @@ int ast_file_is_readable(const char *filename) int ast_compare_versions(const char *version1, const char *version2) { - u_int64_t major[2] = { 0 }; - u_int64_t minor[2] = { 0 }; - u_int64_t patch[2] = { 0 }; - u_int64_t extra[2] = { 0 }; - u_int64_t v1, v2; - - sscanf(version1, "%lu.%lu.%lu.%lu", &major[0], &minor[0], &patch[0], &extra[0]); - sscanf(version2, "%lu.%lu.%lu.%lu", &major[1], &minor[1], &patch[1], &extra[1]); + unsigned int major[2] = { 0 }; + unsigned int minor[2] = { 0 }; + unsigned int patch[2] = { 0 }; + unsigned int extra[2] = { 0 }; + int res; - v1 = major[0] << 48 | minor[0] << 32 | patch[0] << 16 | extra[0]; - v2 = major[1] << 48 | minor[1] << 32 | patch[1] << 16 | extra[1]; + sscanf(version1, "%u.%u.%u.%u", &major[0], &minor[0], &patch[0], &extra[0]); + sscanf(version2, "%u.%u.%u.%u", &major[1], &minor[1], &patch[1], &extra[1]); - if (v1 < v2) { - return -1; - } else if (v1 > v2) { - return 1; - } else { - return 0; + res = major[0] - major[1]; + if (res) { + return res; + } + res = minor[0] - minor[1]; + if (res) { + return res; + } + res = patch[0] - patch[1]; + if (res) { + return res; } + return extra[0] - extra[1]; } |