Blame SOURCES/freeradius-FR-GV-303-do-memchr-of-end-p-not-q-p.patch

5fa452
From af6d64cfa4f8ff64da1b5cd6cacd06ae3c095c37 Mon Sep 17 00:00:00 2001
5fa452
From: "Alan T. DeKok" <aland@freeradius.org>
5fa452
Date: Mon, 3 Jul 2017 15:37:44 -0400
5fa452
Subject: [PATCH] FR-GV-303 - do memchr() of end-p, not q-p
5fa452
5fa452
---
5fa452
 src/modules/proto_dhcp/dhcp.c | 20 +++++++++-----------
5fa452
 1 file changed, 9 insertions(+), 11 deletions(-)
5fa452
5fa452
diff --git a/src/modules/proto_dhcp/dhcp.c b/src/modules/proto_dhcp/dhcp.c
5fa452
index a66a931cb..dbfe81747 100644
5fa452
--- a/src/modules/proto_dhcp/dhcp.c
5fa452
+++ b/src/modules/proto_dhcp/dhcp.c
5fa452
@@ -774,25 +774,23 @@ static int fr_dhcp_attr2vp(TALLOC_CTX *ctx, VALUE_PAIR **vp_p, uint8_t const *da
5fa452
 		 *	multiple additional VPs
5fa452
 		 */
5fa452
 		fr_cursor_init(&cursor, vp_p);
5fa452
-		for (;;) {
5fa452
-			q = memchr(p, '\0', q - p);
5fa452
+		while (p < end) {
5fa452
+			q = memchr(p, '\0', end - p);
5fa452
 			/* Malformed but recoverable */
5fa452
 			if (!q) q = end;
5fa452
 
5fa452
 			fr_pair_value_bstrncpy(vp, (char const *)p, q - p);
5fa452
 			p = q + 1;
5fa452
 
5fa452
+			if (p >= end) break;
5fa452
+
5fa452
 			/* Need another VP for the next round */
5fa452
-			if (p < end) {
5fa452
-				vp = fr_pair_afrom_da(ctx, vp->da);
5fa452
-				if (!vp) {
5fa452
-					fr_pair_list_free(vp_p);
5fa452
-					return -1;
5fa452
-				}
5fa452
-				fr_cursor_insert(&cursor, vp);
5fa452
-				continue;
5fa452
+			vp = fr_pair_afrom_da(ctx, vp->da);
5fa452
+			if (!vp) {
5fa452
+				fr_pair_list_free(vp_p);
5fa452
+				return -1;
5fa452
 			}
5fa452
-			break;
5fa452
+			fr_cursor_insert(&cursor, vp);
5fa452
 		}
5fa452
 	}
5fa452
 		break;
5fa452
-- 
5fa452
2.13.2
5fa452