diff options
Diffstat (limited to 'catsprintf.c')
-rw-r--r-- | catsprintf.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/catsprintf.c b/catsprintf.c index d9d73ff..c8f74fc 100644 --- a/catsprintf.c +++ b/catsprintf.c @@ -59,20 +59,26 @@ dmi_minor* dmiAppendObject(long code, char const *key, const char *format, ...) //. int minor = code&0x00FF; //. int major = code>>8; + va_list arg; va_start(arg, format); dmi_minor *o = (dmi_minor *)malloc(sizeof(dmi_minor)); + o->next = last; o->id = code; o->major = (dmi_codes_major *)&dmiCodesMajor[map_maj[code>>8]]; o->key = (char *)key; - if (format != NULL) - vsprintf(o->value, format, arg); - o->next = last; + if(format != NULL) + if(vsnprintf(o->value, MAXVAL-1, format, arg) > MAXVAL) { + free(o); + o = NULL; + //. TODO: Make this a python exception. + printf("dmidecode: Internal (python module) error; Value too long.\n"); + } - va_end(arg); /* cleanup */ last = o; + va_end(arg); /* cleanup */ return o; } |