diff --git a/mbus/mbus-protocol.c b/mbus/mbus-protocol.c index 76ed529..4389e60 100755 --- a/mbus/mbus-protocol.c +++ b/mbus/mbus-protocol.c @@ -9,6 +9,7 @@ //------------------------------------------------------------------------------ #include +#include #include #include #include @@ -3226,26 +3227,34 @@ mbus_str_xml_encode(u_char *dst, const u_char *src, size_t 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 (iscntrl(src[i])) + { + // convert all control chars into spaces + dst[len++] = ' '; + } + else + { + 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++; } }