From 6dd17954d2ec6fed335c8799282ffa730acb9d07 Mon Sep 17 00:00:00 2001 From: Stefan Wahren Date: Sun, 6 May 2012 21:55:39 +0200 Subject: [PATCH] Added check to avoid segmentation fault --- mbus/mbus-protocol.c | 52 ++++++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/mbus/mbus-protocol.c b/mbus/mbus-protocol.c index 8e20465..0e97e30 100644 --- a/mbus/mbus-protocol.c +++ b/mbus/mbus-protocol.c @@ -2943,32 +2943,36 @@ mbus_str_xml_encode(u_char *dst, const u_char *src, size_t max_len) i = 0; len = 0; - while((len+6) < max_len) { - if (src[i] == '\0') + if (src != NULL) + { + while((len+6) < max_len) { - break; - } - - switch (src[i]) - { - case '&': - len += snprintf(&dst[len], max_len - len, "&"); - break; - case '<': - len += snprintf(&dst[len], max_len - len, "<"); - break; - case '>': - len += snprintf(&dst[len], max_len - len, ">"); - break; - case '"': - len += snprintf(&dst[len], max_len - len, """); - break; - default: - dst[len++] = src[i]; - break; - } + if (src[i] == '\0') + { + break; + } - i++; + switch (src[i]) + { + case '&': + len += snprintf(&dst[len], max_len - len, "&"); + break; + case '<': + len += snprintf(&dst[len], max_len - len, "<"); + break; + case '>': + len += snprintf(&dst[len], max_len - len, ">"); + break; + case '"': + len += snprintf(&dst[len], max_len - len, """); + break; + default: + dst[len++] = src[i]; + break; + } + + i++; + } } dst[len] = '\0';