Diff between 876672aa99ccdd63151cbe03c3cf04aa2d3fddec and 9f5db347f079b68efe2cca677df8be7b3b830e9c

Changed Files

File Additions Deletions Status
src/eir.c +6 -3 modified

Full Patch

diff --git a/src/eir.c b/src/eir.c
index fb9c760..1b68949 100644
--- a/src/eir.c
+++ b/src/eir.c
@@ -119,6 +119,7 @@ int eir_parse(struct eir_data *eir, uint8_t *eir_data, uint8_t eir_len)
 
 	while (len < eir_len - 1) {
 		uint8_t field_len = eir_data[0];
+		uint8_t name_len;
 
 		/* Check for the end of EIR */
 		if (field_len == 0)
@@ -156,11 +157,13 @@ int eir_parse(struct eir_data *eir, uint8_t *eir_data, uint8_t eir_len)
 		case EIR_NAME_COMPLETE:
 			/* Some vendors put a NUL byte terminator into
 			 * the name */
-			while (field_len > 1 && eir_data[field_len] == '\0')
-				field_len--;
+			name_len = field_len - 1;
+
+			while (name_len > 0 && eir_data[name_len - 1] == '\0')
+				name_len--;
 
 			if (!g_utf8_validate((char *) &eir_data[2],
-							field_len - 1, NULL))
+								name_len, NULL))
 				break;
 
 			g_free(eir->name);