From: Baofeng Wang Date: Wed, 20 Apr 2016 14:28:24 +0000 (+0300) Subject: liblib: *_strndup() and *_strconcat() shouldn't pass through NULLs. X-Git-Tag: 2.3.0.rc1~3581 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a0c3a13887af4a269e2848b4f30014ca16ef4823;p=thirdparty%2Fdovecot%2Fcore.git liblib: *_strndup() and *_strconcat() shouldn't pass through NULLs. Assert NULL string pointer in below functions: i_strndup(), t_strndup() and p_strconcat(), t_strconcat(), i_strconcat() and vstrconcat. Replace former NULL condition check accordingly. --- diff --git a/src/lib/imem.c b/src/lib/imem.c index 847599cded..608594e46c 100644 --- a/src/lib/imem.c +++ b/src/lib/imem.c @@ -31,6 +31,7 @@ char *i_strdup_until(const void *str, const void *end) char *i_strndup(const void *str, size_t max_chars) { + i_assert(str != NULL); return p_strndup(default_pool, str, max_chars); } @@ -56,6 +57,8 @@ char *i_strconcat(const char *str1, ...) char *ret; size_t len; + i_assert(str1 != NULL); + va_start(args, str1); T_BEGIN { diff --git a/src/lib/strfuncs.c b/src/lib/strfuncs.c index d8d3bc4fc4..aa293f906f 100644 --- a/src/lib/strfuncs.c +++ b/src/lib/strfuncs.c @@ -86,11 +86,9 @@ char *p_strndup(pool_t pool, const void *str, size_t max_chars) char *mem; size_t len; + i_assert(str != NULL); i_assert(max_chars != (size_t)-1); - if (str == NULL) - return NULL; - len = 0; while (len < max_chars && ((const char *) str)[len] != '\0') len++; @@ -175,8 +173,7 @@ char *vstrconcat(const char *str1, va_list args, size_t *ret_len) char *temp; size_t bufsize, i, len; - if (str1 == NULL) - return NULL; + i_assert(str1 != NULL); str = str1; bufsize = STRCONCAT_BUFSIZE; @@ -211,6 +208,8 @@ char *p_strconcat(pool_t pool, const char *str1, ...) char *temp, *ret; size_t len; + i_assert(str1 != NULL); + va_start(args, str1); if (pool->datastack_pool) { @@ -256,6 +255,7 @@ const char *t_strdup_until(const void *start, const void *end) const char *t_strndup(const void *str, size_t max_chars) { + i_assert(str != NULL); return p_strndup(unsafe_data_stack_pool, str, max_chars); } @@ -282,6 +282,8 @@ const char *t_strconcat(const char *str1, ...) const char *ret; size_t len; + i_assert(str1 != NULL); + va_start(args, str1); ret = vstrconcat(str1, args, &len);