diff options
-rw-r--r-- | source4/lib/util_str.c | 15 | ||||
-rw-r--r-- | source4/torture/raw/search.c | 10 |
2 files changed, 20 insertions, 5 deletions
diff --git a/source4/lib/util_str.c b/source4/lib/util_str.c index fd13f86501..a6f54f9a8d 100644 --- a/source4/lib/util_str.c +++ b/source4/lib/util_str.c @@ -1464,3 +1464,18 @@ BOOL add_string_to_array(TALLOC_CTX *mem_ctx, return True; } + + +/* + varient of strcmp() that handles NULL ptrs +*/ +int strcmp_safe(const char *s1, const char *s2) +{ + if (s1 == s2) { + return 0; + } + if (s1 == NULL || s2 == NULL) { + return s1?-1:1; + } + return strcmp(s1, s2); +} diff --git a/source4/torture/raw/search.c b/source4/torture/raw/search.c index f91c8083a5..f1d51a8c69 100644 --- a/source4/torture/raw/search.c +++ b/source4/torture/raw/search.c @@ -512,27 +512,27 @@ static NTSTATUS multiple_search(struct smbcli_state *cli, static int search_both_compare(union smb_search_data *d1, union smb_search_data *d2) { - return strcmp(d1->both_directory_info.name.s, d2->both_directory_info.name.s); + return strcmp_safe(d1->both_directory_info.name.s, d2->both_directory_info.name.s); } static int search_standard_compare(union smb_search_data *d1, union smb_search_data *d2) { - return strcmp(d1->standard.name.s, d2->standard.name.s); + return strcmp_safe(d1->standard.name.s, d2->standard.name.s); } static int search_ea_size_compare(union smb_search_data *d1, union smb_search_data *d2) { - return strcmp(d1->ea_size.name.s, d2->ea_size.name.s); + return strcmp_safe(d1->ea_size.name.s, d2->ea_size.name.s); } static int search_directory_info_compare(union smb_search_data *d1, union smb_search_data *d2) { - return strcmp(d1->directory_info.name.s, d2->directory_info.name.s); + return strcmp_safe(d1->directory_info.name.s, d2->directory_info.name.s); } static int search_old_compare(union smb_search_data *d1, union smb_search_data *d2) { - return strcmp(d1->search.name, d2->search.name); + return strcmp_safe(d1->search.name, d2->search.name); } |