|
|
@@ -78,17 +78,17 @@ setstatus(const char *str)
|
|
|
static char *
|
|
|
smprintf(const char *fmt, ...)
|
|
|
{
|
|
|
- va_list fmtargs;
|
|
|
- char tmp[120];
|
|
|
+ /* FIXME: This code should have
|
|
|
+ bound checks, it is vulnerable to
|
|
|
+ buffer overflows */
|
|
|
+ va_list ap;
|
|
|
char *ret = NULL;
|
|
|
|
|
|
- va_start(fmtargs, fmt);
|
|
|
- snprintf(tmp, sizeof(tmp)-1, fmt, fmtargs);
|
|
|
- tmp[sizeof(tmp)] = '\0';
|
|
|
- if (asprintf(&ret, "%s", tmp) < 0)
|
|
|
+ va_start(ap, fmt);
|
|
|
+ if (vasprintf(&ret, fmt, ap) < 0)
|
|
|
return NULL;
|
|
|
|
|
|
- va_end(fmtargs);
|
|
|
+ va_end(ap);
|
|
|
return ret;
|
|
|
}
|
|
|
|