From acd65542069457cf24dd64d5c6625e88cb7242fb Mon Sep 17 00:00:00 2001 From: Noel Power Date: Fri, 24 May 2019 14:03:37 +0000 Subject: [PATCH] lib/util: clang: Fix a dereference of a null pointer warning(s) Fixes: lib/util/ms_fnmatch.c:75:8: warning: Access to field 'predot' results in a dereference of a null pointer (loaded from variable 'max_n') <--[clang] if (max_n->predot && max_n->predot <= n) { ^ lib/util/ms_fnmatch.c:91:8: warning: Access to field 'predot' results in a dereference of a null pointer (loaded from variable 'max_n') <--[clang] if (max_n->predot && max_n->predot <= n) { Signed-off-by: Noel Power Reviewed-by: Gary Lockyer gary@catalyst.net.nz --- lib/util/ms_fnmatch.c | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/lib/util/ms_fnmatch.c b/lib/util/ms_fnmatch.c index 636ac399f66..5e05312f25a 100644 --- a/lib/util/ms_fnmatch.c +++ b/lib/util/ms_fnmatch.c @@ -72,7 +72,8 @@ static int ms_fnmatch_core(const char *p, const char *n, switch (c) { case '*': /* a '*' matches zero or more characters of any type */ - if (max_n->predot && max_n->predot <= n) { + if (max_n != NULL && max_n->predot && + max_n->predot <= n) { return null_match(p); } for (i=0; n[i]; i += size_n) { @@ -81,17 +82,22 @@ static int ms_fnmatch_core(const char *p, const char *n, return 0; } } - if (!max_n->predot || max_n->predot > n) max_n->predot = n; + if (max_n != NULL && (!max_n->predot || + max_n->predot > n)) { + max_n->predot = n; + } return null_match(p); case '<': /* a '<' matches zero or more characters of any type, but stops matching at the last '.' in the string. */ - if (max_n->predot && max_n->predot <= n) { + if (max_n != NULL && max_n->predot && + max_n->predot <= n) { return null_match(p); } - if (max_n->postdot && max_n->postdot <= n && n <= ldot) { + if (max_n != NULL && max_n->postdot && + max_n->postdot <= n && n <= ldot) { return -1; } for (i=0; n[i]; i += size_n) { @@ -99,11 +105,19 @@ static int ms_fnmatch_core(const char *p, const char *n, if (ms_fnmatch_core(p, n+i, max_n+1, ldot, is_case_sensitive) == 0) return 0; if (n+i == ldot) { if (ms_fnmatch_core(p, n+i+size_n, max_n+1, ldot, is_case_sensitive) == 0) return 0; - if (!max_n->postdot || max_n->postdot > n) max_n->postdot = n; + if (max_n != NULL) { + if (!max_n->postdot || + max_n->postdot > n) { + max_n->postdot = n; + } + } return -1; } } - if (!max_n->predot || max_n->predot > n) max_n->predot = n; + if (max_n != NULL && (!max_n->predot || + max_n->predot > n)) { + max_n->predot = n; + } return null_match(p); case '?':