X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcutil%2Fsilcutil.c;h=8bc4e2c32a736c0f788e67067ba1e752b422d176;hb=675d6cba5a80e53c09c5eb6a03bafffebb6edab0;hp=57931f7e649d4ae8f78bb810011f31927659ce54;hpb=27062265305e9ccedad49f333a1e3cdb8333d6e3;p=silc.git diff --git a/lib/silcutil/silcutil.c b/lib/silcutil/silcutil.c index 57931f7e..8bc4e2c3 100644 --- a/lib/silcutil/silcutil.c +++ b/lib/silcutil/silcutil.c @@ -783,11 +783,12 @@ bool silc_parse_version_string(const char *version, /* Take protocol version */ maj = atoi(cp); - cp = strchr(cp, '.'); - if (cp) { - min = atoi(cp + 1); - cp++; - } + if (!strchr(cp, '.')) + return FALSE; + cp = strchr(cp, '.') + 1; + if (!cp || !(*cp)) + return FALSE; + min = atoi(cp); memset(buf, 0, sizeof(buf)); snprintf(buf, sizeof(buf) - 1, "%d%d", maj, min); @@ -802,14 +803,18 @@ bool silc_parse_version_string(const char *version, maj = 0; min = 0; - cp = strchr(cp, '-'); - if (!cp) + if (!strchr(cp, '-')) + return FALSE; + cp = strchr(cp, '-') + 1; + if (!cp || !(*cp)) return FALSE; - maj = atoi(cp + 1); - cp = strchr(cp, '.'); - if (cp) - min = atoi(cp + 1); + maj = atoi(cp); + if (strchr(cp, '.')) { + cp = strchr(cp, '.') + 1; + if (cp && *cp) + min = atoi(cp); + } memset(buf, 0, sizeof(buf)); snprintf(buf, sizeof(buf) - 1, "%d%d", maj, min); @@ -822,11 +827,10 @@ bool silc_parse_version_string(const char *version, /* Take vendor string */ - cp++; - if (cp) { - cp = strchr(cp, '.'); - if (cp && cp + 1 && vendor_version) - *vendor_version = strdup(cp + 1); + if (strchr(cp, '.')) { + cp = strchr(cp, '.') + 1; + if (cp && *cp && vendor_version) + *vendor_version = strdup(cp); } return TRUE;