aboutsummaryrefslogtreecommitdiffstats
path: root/package/network/services/dnsmasq/patches/0041-Don-t-attempt-to-parse-a-sequence-of-hex-digits-with.patch
blob: 2ff6f88ed07c92f9880f680af6488d1e1001e308 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
From 6799320edb9f8465659259721e01e15f9d263aeb Mon Sep 17 00:00:00 2001
From: Simon Kelley <simon@thekelleys.org.uk>
Date: Mon, 4 Mar 2019 22:59:42 +0000
Subject: [PATCH 41/57] Don't attempt to parse a sequence of hex digits without
 any colons as IPv6 address.

Another confusion in the heuristic dhcp-option parsing. Sigh.

Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
---
 src/option.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

--- a/src/option.c
+++ b/src/option.c
@@ -1181,7 +1181,7 @@ static int parse_dhcp_opt(char *errstr,
     {
       /* characterise the value */
       char c;
-      int found_dig = 0;
+      int found_dig = 0, found_colon = 0;
       is_addr = is_addr6 = is_hex = is_dec = is_string = 1;
       addrs = digs = 1;
       dots = 0;
@@ -1195,6 +1195,7 @@ static int parse_dhcp_opt(char *errstr,
 	  {
 	    digs++;
 	    is_dec = is_addr = 0;
+	    found_colon = 1;
 	  }
 	else if (c == '/') 
 	  {
@@ -1236,6 +1237,9 @@ static int parse_dhcp_opt(char *errstr,
      
       if (!found_dig)
 	is_dec = is_addr = 0;
+
+      if (!found_colon)
+	is_addr6 = 0;
      
       /* We know that some options take addresses */
       if (opt_len & OT_ADDR_LIST)