diff --git a/src/eir.c b/src/eir.c
index e4554e8..3826f55 100644
--- a/src/eir.c
+++ b/src/eir.c
while (len < eir_len - 1) {
uint8_t field_len = eir_data[0];
+ ssize_t name_len;
/* Check for the end of EIR */
if (field_len == 0)
case EIR_NAME_SHORT:
case EIR_NAME_COMPLETE:
+ /* Some vendors put a NUL byte terminator. If that is
+ * the case, use -1 as string length so
+ * g_utf8_validade() can parse it properly. */
+ if (eir_data[field_len] == '\0')
+ name_len = -1;
+ else
+ name_len = field_len - 1;
+
if (!g_utf8_validate((char *) &eir_data[2],
- field_len - 1, NULL))
+ name_len, NULL))
break;
g_free(eir->name);