[U-Boot] [PATCH v2] Prevented possible null dereference.

Niv Shetrit niv.shetrit at altair-semi.com
Mon Aug 26 16:55:55 UTC 2019


Signed-off-by: Niv Shetrit <niv.shetrit at altair-semi.com>
---
 common/cli_hush.c | 73 ++++++++++++++++++++++++-----------------------
 1 file changed, 38 insertions(+), 35 deletions(-)

diff --git a/common/cli_hush.c b/common/cli_hush.c
index 8f86e4aa4a..c14302c3ad 100644
--- a/common/cli_hush.c
+++ b/common/cli_hush.c
@@ -3539,41 +3539,44 @@ static char *insert_var_value_sub(char *inp, int tag_subst)
 		}
 		inp = ++p;
 		/* find the ending marker */
-		p = strchr(inp, SPECIAL_VAR_SYMBOL);
-		*p = '\0';
-		/* look up the value to substitute */
-		if ((p1 = lookup_param(inp))) {
-			if (tag_subst)
-				len = res_str_len + strlen(p1) + 2;
-			else
-				len = res_str_len + strlen(p1);
-			res_str = xrealloc(res_str, (1 + len));
-			if (tag_subst) {
-				/*
-				 * copy the variable value to the result
-				 * string
-				 */
-				strcpy((res_str + res_str_len + 1), p1);
-
-				/*
-				 * mark the replaced text to be accepted as
-				 * is
-				 */
-				res_str[res_str_len] = SUBSTED_VAR_SYMBOL;
-				res_str[res_str_len + 1 + strlen(p1)] =
-					SUBSTED_VAR_SYMBOL;
-			} else
-				/*
-				 * copy the variable value to the result
-				 * string
-				 */
-				strcpy((res_str + res_str_len), p1);
-
-			res_str_len = len;
-		}
-		*p = SPECIAL_VAR_SYMBOL;
-		inp = ++p;
-		done = 1;
+		p = strchr(inp, SPECIAL_VAR_SYMBOL)
+		if (p != NULL) {
+			*p = '\0';
+			/* look up the value to substitute */
+			p1 = lookup_param(inp)
+			if (p1 != NULL) {
+				if (tag_subst)
+					len = res_str_len + strlen(p1) + 2;
+				else
+					len = res_str_len + strlen(p1);
+				res_str = xrealloc(res_str, (1 + len));
+				if (tag_subst) {
+					/*
+					 * copy the variable value to the
+					 * result string
+					 */
+					strcpy((res_str + res_str_len + 1), p1);
+
+					/*
+					 * mark the replaced text to be
+					 * accepted as is
+					 */
+					res_str[res_str_len] = SUBSTED_VAR_SYMBOL;
+					res_str[res_str_len + 1 + strlen(p1)] =
+						SUBSTED_VAR_SYMBOL;
+				} else
+					/*
+					 * copy the variable value to the result
+					 * string
+					 */
+					strcpy((res_str + res_str_len), p1);
+
+				res_str_len = len;
+			}
+			*p = SPECIAL_VAR_SYMBOL;
+			inp = ++p;
+			done = 1;
+		}
 	}
 	if (done) {
 		res_str = xrealloc(res_str, (1 + res_str_len + strlen(inp)));
-- 
2.17.1



More information about the U-Boot mailing list