imv-scanner: Properly check snprintf() return value

This commit is contained in:
Tobias Brunner
2013-07-24 16:17:22 +02:00
parent 16748bdff7
commit 346a4a1fc2
@@ -332,7 +332,8 @@ METHOD(imv_agent_if_t, batch_ending, TNC_Result,
u_int16_t port; u_int16_t port;
bool closed_port_policy, blocked, first; bool closed_port_policy, blocked, first;
char result_str[BUF_LEN], *pos, *protocol_str; char result_str[BUF_LEN], *pos, *protocol_str;
size_t len, written; size_t len;
int written;
linked_list_t *port_list; linked_list_t *port_list;
enumerator_t *e1, *e2; enumerator_t *e1, *e2;
@@ -410,12 +411,15 @@ METHOD(imv_agent_if_t, batch_ending, TNC_Result,
{ {
written = snprintf(pos, len, "violating %s ports:", written = snprintf(pos, len, "violating %s ports:",
protocol_str); protocol_str);
pos += written; if (written > 0 && written < len)
len -= written; {
pos += written;
len -= written;
}
first = FALSE; first = FALSE;
} }
written = snprintf(pos, len, " %u", port); written = snprintf(pos, len, " %u", port);
if (written > len || written < 0) if (written < 0 || written >= len)
{ {
pos += len - 1; pos += len - 1;
*pos = '\0'; *pos = '\0';