Mercurial > dovecot > core-2.2
changeset 15032:5930f7812e28
str_*printfa(): Avoid (harder!) growing underlying buffer if possible.
The previous change for this didn't work properly.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Thu, 06 Sep 2012 01:04:28 +0300 |
parents | 9bc2e718392c |
children | 34076ab28d28 |
files | src/lib/str.c |
diffstat | 1 files changed, 3 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib/str.c Tue Sep 04 19:58:59 2012 +0300 +++ b/src/lib/str.c Thu Sep 06 01:04:28 2012 +0300 @@ -145,10 +145,11 @@ init_size += SNPRINTF_INITIAL_EXTRA_SIZE; /* @UNSAFE */ - if (init_size > buffer_get_size(str)) { + if (pos+init_size > buffer_get_size(str) && + pos < buffer_get_size(str)) { /* avoid growing buffer larger if possible. this is also required if buffer isn't dynamically growing. */ - init_size = buffer_get_size(str); + init_size = buffer_get_size(str)-pos; } tmp = buffer_get_space_unsafe(str, pos, init_size); ret = vsnprintf(tmp, init_size, fmt, args);