r1820: added a strcmp_safe() that handles NULL pointers. Needed for the
authorAndrew Tridgell <tridge@samba.org>
Sat, 14 Aug 2004 05:57:43 +0000 (05:57 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:57:59 +0000 (12:57 -0500)
search torture test, as some servers return really bad entries.
(This used to be commit c900ebb3ac18d77ab334d3bf5259b3bba547b09c)

source4/lib/util_str.c
source4/torture/raw/search.c

index fd13f8650197accb5aca8baac0240892067b4b7c..a6f54f9a8d9293ab703b64bd325ad0fe58b56246 100644 (file)
@@ -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);
+}
index f91c8083a517d626eb4f758fd87ecbf636845ee0..f1d51a8c6932829386231acb725ee6327edbca2e 100644 (file)
@@ -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);
 }