vcm_print_error: fix segfault on long messages
Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
diff --git a/src/cmocka.c b/src/cmocka.c
index 376acba..9300f04 100644
--- a/src/cmocka.c
+++ b/src/cmocka.c
@@ -1720,11 +1720,12 @@
size_t msg_len = 0;
va_list ap;
int len;
+ va_copy(ap, args);
len = vsnprintf(buffer, sizeof(buffer), format, args);
if (len < 0) {
/* TODO */
- return;
+ goto end;
}
if (cm_error_message == NULL) {
@@ -1733,7 +1734,7 @@
cm_error_message = libc_malloc(len + 1);
if (cm_error_message == NULL) {
/* TODO */
- return;
+ goto end;
}
} else {
/* APPEND MESSAGE */
@@ -1742,7 +1743,7 @@
msg_len = strlen(cm_error_message);
tmp = libc_realloc(cm_error_message, msg_len + len + 1);
if (tmp == NULL) {
- return;
+ goto end;
}
cm_error_message = tmp;
}
@@ -1751,10 +1752,11 @@
/* Use len + 1 to also copy '\0' */
memcpy(cm_error_message + msg_len, buffer, len + 1);
} else {
- va_copy(ap, args);
vsnprintf(cm_error_message + msg_len, len, format, ap);
- va_end(ap);
}
+end:
+ va_end(ap);
+
}
static void vcm_free_error(char *err_msg)