- Check for output truncation in strcatf().
This commit is contained in:
parent
1c748c1d5a
commit
ba75f275e1
@ -50,8 +50,8 @@ struct runtime_vars_s {
|
|||||||
|
|
||||||
struct string_s {
|
struct string_s {
|
||||||
char *data; // ptr to start of memory area
|
char *data; // ptr to start of memory area
|
||||||
int off;
|
size_t off;
|
||||||
int size;
|
size_t size;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef uint8_t media_types;
|
typedef uint8_t media_types;
|
||||||
|
9
utils.c
9
utils.c
@ -37,11 +37,16 @@ inline int
|
|||||||
strcatf(struct string_s *str, const char *fmt, ...)
|
strcatf(struct string_s *str, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
int size;
|
||||||
va_list ap;
|
va_list ap;
|
||||||
|
|
||||||
|
if (str->off >= str->size)
|
||||||
|
return 0;
|
||||||
|
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
ret = vsnprintf(str->data + str->off, str->size - str->off, fmt, ap);
|
size = str->size - str->off;
|
||||||
str->off += ret;
|
ret = vsnprintf(str->data + str->off, size, fmt, ap);
|
||||||
|
str->off += MIN(ret, size);
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user