X-Git-Url: https://git.exim.org/exim.git/blobdiff_plain/c0b9d3e87264ae274b37116103ecc9e1d1b0c647..a5ffa9b475a426bc73366db01f7cc92a3811bc3a:/src/src/string.c?ds=sidebyside diff --git a/src/src/string.c b/src/src/string.c index b59ed668f..0d5a09703 100644 --- a/src/src/string.c +++ b/src/src/string.c @@ -42,7 +42,7 @@ int yield = 4; /* If an optional mask is permitted, check for it. If found, pass back the offset. */ -if (maskptr != NULL) +if (maskptr) { const uschar *ss = s + Ustrlen(s); *maskptr = 0; @@ -79,7 +79,7 @@ if (Ustrchr(s, ':') != NULL) if we hit the / that introduces a mask or the % that introduces the interface specifier (scope id) of a link-local address. */ - if (*s == 0 || *s == '%' || *s == '/') return had_double_colon? yield : 0; + if (*s == 0 || *s == '%' || *s == '/') return had_double_colon ? yield : 0; /* If a component starts with an additional colon, we have hit a double colon. This is permitted to appear once only, and counts as at least @@ -135,13 +135,16 @@ if (Ustrchr(s, ':') != NULL) for (i = 0; i < 4; i++) { + long n; + uschar * end; + if (i != 0 && *s++ != '.') return 0; - if (!isdigit(*s++)) return 0; - if (isdigit(*s) && isdigit(*(++s))) s++; + n = strtol(CCS s, CSS &end, 10); + if (n > 255 || n < 0 || end <= s || end > s+3) return 0; + s = end; } -return (*s == 0 || (*s == '/' && maskptr != NULL && *maskptr != 0))? - yield : 0; +return !*s || (*s == '/' && maskptr && *maskptr != 0) ? yield : 0; } #endif /* COMPILE_UTILITY */ @@ -306,7 +309,7 @@ expanded string. */ ss = store_get(length + nonprintcount * 3 + 1); -/* Copy everying, escaping non printers. */ +/* Copy everything, escaping non printers. */ t = s; tt = ss; @@ -974,14 +977,14 @@ return buffer; ************************************************/ /* This function is used to build a list, returning an allocated null-terminated growable string. The -given element has any embedded seperator characters +given element has any embedded separator characters doubled. Arguments: list points to the start of the list that is being built, or NULL if this is a new list that has no contents yet - sep list seperator charactoer - ele new lement to be appended to the list + sep list separator character + ele new element to be appended to the list Returns: pointer to the start of the list, changed if copied for expansion. */ @@ -1078,7 +1081,7 @@ Arguments: characters, updated to the new offset s points to characters to add count count of characters to add; must not exceed the length of s, if s - is a C string. If -1 given, strlen(s) is used. + is a C string. If string is given as NULL, *size and *ptr should both be zero. @@ -1141,7 +1144,7 @@ common use is a null string and zero size and pointer, on first use for a string being built. The "if" above then allocates, but Coverity assume that the "if" might not happen and whines for a null-deref done by the memcpy(). */ -/* coverity[deref_parm_field_in_call] */ +/* coverity[deref_parm_field_in_call] : FALSE */ memcpy(string + p, s, count); *ptr = p + count; return string;