summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/lib/util_str.c15
-rw-r--r--source4/torture/raw/search.c10
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);
}