summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoel Power <noel.power@suse.com>2019-05-24 14:03:37 +0000
committerNoel Power <npower@samba.org>2019-06-11 12:10:17 +0000
commitacd65542069457cf24dd64d5c6625e88cb7242fb (patch)
tree3eb60b192b16fd98c8b37c8feab369a440788ea0
parentadd47e288bc80c1bf45765d1588a9fa5998ea677 (diff)
downloadsamba-acd65542069457cf24dd64d5c6625e88cb7242fb.tar.gz
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 <noel.power@suse.com> Reviewed-by: Gary Lockyer gary@catalyst.net.nz
-rw-r--r--lib/util/ms_fnmatch.c26
1 files 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 '?':