mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2026-02-06 09:52:32 +01:00
BUG/MEDIUM: tools: vsnprintf() is not always reliable on Solaris
Seen on Solaris 8, calling vsnprintf() with a null-size results in the output size not being computed. This causes some random behaviour including crashes when trying to display error messages when loading an invalid configuration.
This commit is contained in:
parent
a39d19905e
commit
1b2fed6962
@ -1900,13 +1900,21 @@ char *memprintf(char **out, const char *format, ...)
|
||||
* intermediate evaluations get wrong.
|
||||
*/
|
||||
va_start(args, format);
|
||||
needed = vsnprintf(ret, allocated, format, args) + 1;
|
||||
needed = vsnprintf(ret, allocated, format, args);
|
||||
va_end(args);
|
||||
|
||||
if (needed <= allocated)
|
||||
break;
|
||||
if (needed < allocated) {
|
||||
/* Note: on Solaris 8, the first iteration always
|
||||
* returns -1 if allocated is zero, so we force a
|
||||
* retry.
|
||||
*/
|
||||
if (!allocated)
|
||||
needed = 0;
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
||||
allocated = needed;
|
||||
allocated = needed + 1;
|
||||
ret = realloc(ret, allocated);
|
||||
} while (ret);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user