|
|
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 |
|