File dhcp-4.1.1-P1-optional-value-infinite-loop.diff of Package dhcp

From 912eb17103f764ef4486b30a4801af64321a23ed Mon Sep 17 00:00:00 2001
From: Marius Tomaschewski <mt@suse.de>
Date: Fri, 29 Oct 2010 18:51:02 +0200
Subject: [PATCH] dhcp-4.1.1-P1-optional-value-infinite-loop

Fixed dhcp server infinite loop while parsing options with optional
parts in the value such as in slp-service-scope option (bnc#643845,
[ISC-Bugs #22410]).

Signed-off-by: Marius Tomaschewski <mt@suse.de>
---
 common/parse.c |   17 ++++++++++++++++-
 1 files changed, 16 insertions(+), 1 deletions(-)

diff --git a/common/parse.c b/common/parse.c
index 34b909a..081dcc9 100644
--- a/common/parse.c
+++ b/common/parse.c
@@ -4931,8 +4931,23 @@ struct option *option;
 		do {
 			if ((*fmt == 'A') || (*fmt == 'a'))
 				break;
-			if (*fmt == 'o')
+			if (*fmt == 'o') {
+				/* previous value were optional */
+				fmt++;
 				continue;
+			}
+			if (fmt[1] == 'o') {
+				/*
+				 * value for current format code is optional
+				 * check if the next token is a semicolon;
+				 * it is expected to be read by our caller.
+				 */
+				token = peek_token (&val, (unsigned *)0, cfile);
+				if (token == SEMI) {
+					fmt++;
+					continue;
+				}
+			}
 
 			tmp = *expr;
 			*expr = NULL;
-- 
1.7.1

openSUSE Build Service is sponsored by