SAFE_FREE patch

Andreas Moroder andreas.moroder at sb-brixen.it
Sun Dec 23 22:31:03 GMT 2001


Hello,

in head in few places free() is used instead of SAFE_FREE. According to Simo 
Sorce it is better to use SAFE_FREE.

In the next lines you will find a patch against HEAD from Sat. 22 9.00 CET.

Merry Christmas
Frohe Weihnacht
Buon Natale

Andreas

diff -r -u --exclude-from=diffex source/auth/auth_domain.c 
new/auth/auth_domain.c
--- source/auth/auth_domain.c	Fri Dec 14 22:37:56 2001
+++ new/auth/auth_domain.c	Sat Dec 22 10:00:21 2001
@@ -343,7 +343,7 @@
                 if (!(pass = Get_Pwnam(dom_user)))
                         pass = Get_Pwnam(user_info->internal_username.str);
 
-                free(dom_user);
+                SAFE_FREE(dom_user);
 
 		if (pass) {
 			make_server_info_pw(server_info, pass);
diff -r -u --exclude-from=diffex source/auth/auth_util.c new/auth/auth_util.c
--- source/auth/auth_util.c	Wed Dec 19 10:53:11 2001
+++ new/auth/auth_util.c	Sat Dec 22 10:00:44 2001
@@ -234,7 +234,7 @@
 		} else {
 			domain = lp_workgroup();
 		}
-		free(user);
+		SAFE_FREE(user);
 	} else {
 		domain = lp_workgroup();
 	}
diff -r -u --exclude-from=diffex source/intl/lang_tdb.c new/intl/lang_tdb.c
--- source/intl/lang_tdb.c	Tue Oct 23 21:10:29 2001
+++ new/intl/lang_tdb.c	Sat Dec 22 09:53:14 2001
@@ -125,7 +125,7 @@
 	asprintf(&msg_path, "%s.msg", lib_path((char *)lang));
 	if (stat(msg_path, &st) != 0) {
 		/* the msg file isn't available */
-		free(msg_path);
+		SAFE_FREE(msg_path);
 		return False;
 	}
 	
@@ -135,14 +135,14 @@
 	tdb = tdb_open_log(path, 0, TDB_DEFAULT, O_RDWR|O_CREAT, 0644);
 	if (!tdb) {
 		tdb = tdb_open_log(path, 0, TDB_DEFAULT, O_RDONLY, 0);
-		free(path);
-		free(msg_path);
+		SAFE_FREE(path);
+		SAFE_FREE(msg_path);
 		if (!tdb) return False;
 		current_lang = strdup(lang);
 		return True;
 	}
 
-	free(path);
+	SAFE_FREE(path);
 
 	loadtime = tdb_fetch_int(tdb, "/LOADTIME/");
 
@@ -150,7 +150,7 @@
 		load_msg(msg_path);
 		tdb_store_int(tdb, "/LOADTIME/", (int)time(NULL));
 	}
-	free(msg_path);
+	SAFE_FREE(msg_path);
 
 	current_lang = strdup(lang);
 
@@ -185,7 +185,7 @@
 void lang_msg_free(const char *msgstr)
 {
 	if (!tdb) return;
-	free((void *)msgstr);
+	SAFE_FREE((void *)msgstr);
 }
 
 
diff -r -u --exclude-from=diffex source/lib/util_file.c new/lib/util_file.c
--- source/lib/util_file.c	Mon Dec 17 12:13:57 2001
+++ new/lib/util_file.c	Sat Dec 22 09:52:16 2001
@@ -450,7 +450,7 @@
 		if (!p || s2 != size) {
 			DEBUG(1,("incorrect size for %s - got %d expected %d\n",
 				 fname, s2, size));
-			if (p) free(p);
+			SAFE_FREE(p);
 			return NULL;
 		}
 	}
diff -r -u --exclude-from=diffex source/lib/util_sid.c new/lib/util_sid.c
--- source/lib/util_sid.c	Wed Dec 19 09:37:03 2001
+++ new/lib/util_sid.c	Sat Dec 22 09:51:13 2001
@@ -704,7 +704,7 @@
 	if (!buf) return NULL;
 	sid_linearize(buf, len, sid);
 	s = binary_string(buf, len);
-	free(buf);
+	SAFE_FREE(buf);
 	return s;
 }
 
diff -r -u --exclude-from=diffex source/lib/util_unistr.c new/lib/util_unistr.c
--- source/lib/util_unistr.c	Thu Dec 20 11:02:30 2001
+++ new/lib/util_unistr.c	Sat Dec 22 09:51:50 2001
@@ -99,7 +99,7 @@
 		return;
 	}
 
-	if (valid_table) free(valid_table);
+	SAFE_FREE(valid_table);
 
 	DEBUG(2,("creating default valid table\n"));
 	valid_table = malloc(0x10000);
diff -r -u --exclude-from=diffex source/libads/ads_struct.c 
new/libads/ads_struct.c
--- source/libads/ads_struct.c	Wed Dec 19 13:21:10 2001
+++ new/libads/ads_struct.c	Sat Dec 22 09:46:07 2001
@@ -53,7 +53,7 @@
 		strlcat(ret, p, len);
 	}
 
-	free(r);
+	SAFE_FREE(r);
 
 	return ret;
 }
diff -r -u --exclude-from=diffex source/libsmb/asn1.c new/libsmb/asn1.c
--- source/libsmb/asn1.c	Tue Nov 20 09:46:02 2001
+++ new/libsmb/asn1.c	Sat Dec 22 09:45:13 2001
@@ -104,7 +104,7 @@
 	}
 
 	data->nesting = nesting->next;
-	free(nesting);
+	SAFE_FREE(nesting);
 	return True;
 }
 
@@ -284,7 +284,7 @@
 	}
 
 	data->nesting = nesting->next;
-	free(nesting);
+	SAFE_FREE(nesting);
 	return True;
 }
 
@@ -342,7 +342,7 @@
 		data->has_error = True;
 		return False;
 	}
-	free(id);
+	SAFE_FREE(id);
 	return True;
 }
 
diff -r -u --exclude-from=diffex source/libsmb/cliconnect.c 
new/libsmb/cliconnect.c
--- source/libsmb/cliconnect.c	Fri Dec 21 13:29:51 2001
+++ new/libsmb/cliconnect.c	Sat Dec 22 09:44:15 2001
@@ -540,7 +540,7 @@
 		    strcmp(OIDs[i], OID_KERBEROS5) == 0) {
 			got_kerberos_mechanism = True;
 		}
-		free(OIDs[i]);
+		SAFE_FREE(OIDs[i]);
 	}
 	DEBUG(3,("got principal=%s\n", principal));
 
@@ -552,7 +552,7 @@
 	}
 #endif
 
-	free(principal);
+	SAFE_FREE(principal);
 
 ntlmssp:
 
diff -r -u --exclude-from=diffex source/libsmb/clientgen.c 
new/libsmb/clientgen.c
--- source/libsmb/clientgen.c	Tue Nov 27 04:29:20 2001
+++ new/libsmb/clientgen.c	Sat Dec 22 09:43:31 2001
@@ -257,7 +257,7 @@
 	allocated = cli->allocated;
 	ZERO_STRUCTP(cli);
 	if (allocated) {
-		free(cli);
+		SAFE_FREE(cli);
 	} 
 }
 
diff -r -u --exclude-from=diffex source/passdb/pdb_smbpasswd.c 
new/passdb/pdb_smbpasswd.c
--- source/passdb/pdb_smbpasswd.c	Thu Dec  6 14:09:14 2001
+++ new/passdb/pdb_smbpasswd.c	Sat Dec 22 09:48:14 2001
@@ -631,11 +631,11 @@
     	}
 
 	endsmbfilepwent(fp, &pw_file_lock_depth);
-	free(new_entry);
+	SAFE_FREE(new_entry);
 	return False;
   }
 
-  free(new_entry);
+  SAFE_FREE(new_entry);
   endsmbfilepwent(fp, &pw_file_lock_depth);
   return True;
 }
@@ -1094,11 +1094,11 @@
       	unlink(pfile2);
 	endsmbfilepwent(fp, &pw_file_lock_depth);
 	endsmbfilepwent(fp_write, &pfile2_lockdepth);
-	free(new_entry);
+	SAFE_FREE(new_entry);
 	return False;
     }
 
-    free(new_entry);
+    SAFE_FREE(new_entry);
   }
 
   /*
diff -r -u --exclude-from=diffex source/printing/pcap.c new/printing/pcap.c
--- source/printing/pcap.c	Tue Oct  2 06:29:34 2001
+++ new/printing/pcap.c	Sat Dec 22 10:02:36 2001
@@ -112,7 +112,7 @@
 
 	iEtat = 0;
 	/* scan qconfig file for searching <printername>:	*/
-	for (;(line = fgets_slash(NULL,sizeof(pstring),pfile)); free(line))
+	for (;(line = fgets_slash(NULL,sizeof(pstring),pfile)); safe_free(line))
 	{
 		if (*line == '*' || *line == 0)
 		continue;
@@ -182,7 +182,7 @@
 	if ((pfile = x_fopen(psz, O_RDONLY, 0)) == NULL)
 	{
 	      DEBUG(0,( "Unable to open qconfig file %s for read!\n", psz));
-	      free(pName);
+	      SAFE_FREE(pName);
 	      return(False);
 	}
 	slprintf(pName, iLg + 9, "%s:",pszPrintername);
@@ -190,7 +190,7 @@
 	/*DEBUG(3,( " Looking for entry %s\n",pName));*/
 	iEtat = 0;
 	/* scan qconfig file for searching <printername>:	*/
-	for (;(line = fgets_slash(NULL,sizeof(pstring),pfile)); free(line))
+	for (;(line = fgets_slash(NULL,sizeof(pstring),pfile)); safe_free(line))
 	{
 		if (*line == '*' || *line == 0)
 		continue;
@@ -209,8 +209,8 @@
 		  	 {
 		  	   /* name is found without stanza device  */
 		  	   /* probably a good printer ???		*/
-		  	   free (line);
-		  	   free(pName);
+		  	   SAFE_FREE(line);
+		  	   SAFE_FREE(pName);
 		  	   fclose(pfile);
 		  	   return(True);
 		  	  }
@@ -223,8 +223,8 @@
 		  	  else if (strlocate(line,"device"))
 		  	  {
 		  		/* it's a good virtual printer */
-		  		free (line);
-		  		free(pName);
+		  		SAFE_FREE (line);
+		  		SAFE_FREE(pName);
 		  		fclose(pfile);
 		  		return(True);
 		  	  }
@@ -289,7 +289,7 @@
       return(False);
     }
 
-  for (;(line = fgets_slash(NULL,sizeof(pstring),pfile)); free(line))
+  for (;(line = fgets_slash(NULL,sizeof(pstring),pfile)); safe_free(line))
     {
       if (*line == '#' || *line == 0)
 	continue;
@@ -308,7 +308,7 @@
 	    {
 	      /* normalise the case */
 	      pstrcpy(pszPrintername,p);
-	      free(line);
+	      SAFE_FREE(line);
 	      x_fclose(pfile);
 	      return(True);	      
 	    }
@@ -370,7 +370,7 @@
       return;
     }
 
-  for (;(line = fgets_slash(NULL,sizeof(pstring),pfile)); free(line))
+  for (;(line = fgets_slash(NULL,sizeof(pstring),pfile)); safe_free(line))
     {
       if (*line == '#' || *line == 0)
 	continue;
diff -r -u --exclude-from=diffex source/printing/printing.c 
new/printing/printing.c
--- source/printing/printing.c	Fri Dec 21 01:37:09 2001
+++ new/printing/printing.c	Sat Dec 22 09:56:21 2001
@@ -105,7 +105,7 @@
 	if (!ret.dptr || ret.dsize != sizeof(pjob)) return NULL;
 
 	memcpy(&pjob, ret.dptr, sizeof(pjob));
-	free(ret.dptr);
+	SAFE_FREE(ret.dptr);
 	return &pjob;
 }
 
@@ -285,7 +285,7 @@
 		return (pid_t)-1;
 
 	memcpy(&updating_pid, data.dptr, sizeof(pid_t));
-	free(data.dptr);
+	SAFE_FREE(data.dptr);
 
 	if (process_exists(updating_pid))
 		return updating_pid;
@@ -839,7 +839,7 @@
 		if (data.dsize == sizeof(print_status_struct)) {
 			memcpy(status, data.dptr, sizeof(print_status_struct));
 		}
-		free(data.dptr);
+		SAFE_FREE(data.dptr);
 	}
 	return status->qcount;
 }
@@ -1203,7 +1203,7 @@
 		if (data.dsize == sizeof(*status)) {
 			memcpy(status, data.dptr, sizeof(*status));
 		}
-		free(data.dptr);
+		SAFE_FREE(data.dptr);
 	}
 
 	/*
diff -r -u --exclude-from=diffex source/smbd/error.c new/smbd/error.c
--- source/smbd/error.c	Sat Dec 22 09:16:46 2001
+++ new/smbd/error.c	Sat Dec 22 09:42:58 2001
@@ -37,7 +37,7 @@
 	int32 err = wbmpx->wr_error;
  
 	/* We can now delete the auxiliary struct */
-	free((char *)wbmpx);
+	SAFE_FREE((char *)wbmpx);
 	fsp->wbmpx_ptr = NULL;
 	return error_packet(outbuf,NT_STATUS_OK,eclass,err,line,file);
 }
diff -r -u --exclude-from=diffex source/smbd/negprot.c new/smbd/negprot.c
--- source/smbd/negprot.c	Sat Dec 22 09:16:52 2001
+++ new/smbd/negprot.c	Sat Dec 22 09:41:21 2001
@@ -194,7 +194,7 @@
 		blob = spnego_gen_negTokenInit(guid, 
 					       lp_security()==SEC_ADS ? 
OIDs_krb5 : OIDs_plain, 
 					       principal);
-		free(principal);
+		SAFE_FREE(principal);
 		ads_destroy(&ads);
 	}
 	memcpy(p, blob.data, blob.length);
diff -r -u --exclude-from=diffex source/smbd/notify_hash.c 
new/smbd/notify_hash.c
--- source/smbd/notify_hash.c	Sat Oct 27 09:17:21 2001
+++ new/smbd/notify_hash.c	Sat Dec 22 09:59:52 2001
@@ -195,7 +195,7 @@
 
 static void hash_remove_notify(void *datap)
 {
-	free(datap);
+	SAFE_FREE(datap);
 }
 
 /****************************************************************************
diff -r -u --exclude-from=diffex source/smbd/password.c new/smbd/password.c
--- source/smbd/password.c	Sat Dec 22 09:16:56 2001
+++ new/smbd/password.c	Sat Dec 22 09:40:47 2001
@@ -232,7 +232,7 @@
 
 	if (!puid || !pgid) {
 		DEBUG(0,("Attempted session setup with invalid user.  No 
uid/gid in SAM_ACCOUNT\n"));
-		free(vuser);
+		SAFE_FREE(vuser);
 		return UID_FIELD_INVALID;
 	}
 
diff -r -u --exclude-from=diffex source/smbd/reply.c new/smbd/reply.c
--- source/smbd/reply.c	Sat Dec 22 09:17:03 2001
+++ new/smbd/reply.c	Sat Dec 22 09:41:59 2001
@@ -4120,8 +4120,7 @@
 	if (nwritten < (ssize_t)numtowrite) {
 		if(write_through) {
 			/* We are returning an error - we can delete the aux 
struct */
-			if (wbms)
-				free((char *)wbms);
+			SAFE_FREE((char *)wbms);
 			fsp->wbmpx_ptr = NULL;
 			END_PROFILE(SMBwriteBs);
 			return(ERROR_DOS(ERRHRD,ERRdiskfull));
@@ -4140,7 +4139,7 @@
 			send_response = True;
 		}
 
-		free((char *)wbms);
+		SAFE_FREE((char *)wbms);
 		fsp->wbmpx_ptr = NULL;
 	}
 
diff -r -u --exclude-from=diffex source/smbd/sesssetup.c new/smbd/sesssetup.c
--- source/smbd/sesssetup.c	Sat Dec 22 09:17:06 2001
+++ new/smbd/sesssetup.c	Sat Dec 22 09:42:21 2001
@@ -247,7 +247,7 @@
 		    strcmp(OID_KERBEROS5_OLD, OIDs[i]) == 0) {
 			got_kerberos = True;
 		}
-		free(OIDs[i]);
+		SAFE_FREE(OIDs[i]);
 	}
 	DEBUG(3,("Got secblob of size %d\n", secblob.length));
 
diff -r -u --exclude-from=diffex source/tdb/tdb.c new/tdb/tdb.c
--- source/tdb/tdb.c	Thu Dec 13 03:34:43 2001
+++ new/tdb/tdb.c	Sat Dec 22 09:54:59 2001
@@ -343,7 +343,7 @@
 		return TDB_ERRCODE(TDB_ERR_OOM, buf);
 	}
 	if (tdb_read(tdb, offset, buf, len, 0) == -1) {
-		free(buf);
+		SAFE_FREE(buf);
 		return NULL;
 	}
 	return buf;
@@ -855,7 +855,7 @@
 		ret = tdb_create_rwlocks(tdb->fd, hash_size);
 
   fail:
-	free(newdb);
+	SAFE_FREE(newdb);
 	return ret;
 }
 
@@ -884,10 +884,10 @@
 				return 0;
 
 			if (memcmp(key.dptr, k, key.dsize) == 0) {
-				free(k);
+				SAFE_FREE(k);
 				return rec_ptr;
 			}
-			free(k);
+			SAFE_FREE(k);
 		}
 		rec_ptr = r->next;
 	}
@@ -1195,10 +1195,10 @@
 			/* They want us to terminate traversal */
 			unlock_record(tdb, tl.off);
 			tdb->travlocks.next = tl.next;
-			free(key.dptr);
+			SAFE_FREE(key.dptr);
 			return count;
 		}
-		free(key.dptr);
+		SAFE_FREE(key.dptr);
 	}
 	tdb->travlocks.next = tl.next;
 	if (ret < 0)
@@ -1248,8 +1248,7 @@
 			tdb->travlocks.off = 0;
 		}
 
-		if (k)
-			free(k);
+		SAFE_FREE(k);
 	}
 
 	if (!tdb->travlocks.off) {
@@ -1367,8 +1366,7 @@
 		ret = -1;
 	}
  out:
-	if (p)
-		free(p); 
+	SAFE_FREE(p); 
 	tdb_unlock(tdb, BUCKET(hash), F_WRLCK);
 	return ret;
 }
@@ -1552,16 +1550,14 @@
 	
 	if (tdb->map_ptr) {
 		if (tdb->flags & TDB_INTERNAL)
-			free(tdb->map_ptr);
+			SAFE_FREE(tdb->map_ptr);
 		else
 			tdb_munmap(tdb);
 	}
-	if (tdb->name)
-		free(tdb->name);
+	SAFE_FREE(tdb->name);
 	if (tdb->fd != -1)
 		close(tdb->fd);
-	if (tdb->locked)
-		free(tdb->locked);
+	SAFE_FREE(tdb->locked);
 	errno = save_errno;
 	return NULL;
 	}
@@ -1575,18 +1571,16 @@
 
 	if (tdb->map_ptr) {
 		if (tdb->flags & TDB_INTERNAL)
-			free(tdb->map_ptr);
+			SAFE_FREE(tdb->map_ptr);
 		else
 			tdb_munmap(tdb);
 	}
-	if (tdb->name)
-		free(tdb->name);
+	SAFE_FREE(tdb->name);
 	if (tdb->fd != -1)
 		ret = close(tdb->fd);
-	if (tdb->locked)
-		free(tdb->locked);
-	if (tdb->lockedkeys)
-		free(tdb->lockedkeys);
+
+	SAFE_FREE(tdb->locked);
+	SAFE_FREE(tdb->lockedkeys);
 
 	/* Remove from contexts list */
 	for (i = &tdbs; *i; i = &(*i)->next) {
@@ -1597,7 +1591,7 @@
 	}
 
 	memset(tdb, 0, sizeof(*tdb));
-	free(tdb);
+	SAFE_FREE(tdb);
 
 	return ret;
 }
@@ -1662,7 +1656,7 @@
 	if (i < number) {
 		for ( j = 0; j < i; j++)
 			tdb_unlock(tdb, j, F_WRLCK);
-		free(tdb->lockedkeys);
+		SAFE_FREE(tdb->lockedkeys);
 		tdb->lockedkeys = NULL;
 		return TDB_ERRCODE(TDB_ERR_NOLOCK, -1);
 	}
@@ -1675,7 +1669,7 @@
 	u32 i;
 	for (i = 0; i < tdb->lockedkeys[0]; i++)
 		tdb_unlock(tdb, tdb->lockedkeys[i+1], F_WRLCK);
-	free(tdb->lockedkeys);
+	SAFE_FREE(tdb->lockedkeys);
 	tdb->lockedkeys = NULL;
 }
 
diff -r -u --exclude-from=diffex source/tdb/tdbutil.c new/tdb/tdbutil.c
--- source/tdb/tdbutil.c	Wed Dec  5 16:45:36 2001
+++ new/tdb/tdbutil.c	Sat Dec 22 09:55:26 2001
@@ -68,7 +68,7 @@
 		return -1;
 	
 	memcpy(&ret, data.dptr, sizeof(int));
-	free(data.dptr);
+	SAFE_FREE(data.dptr);
 	return ret;
 }
 
@@ -374,7 +374,7 @@
 		return;
 
 	DEBUG(level, ("tdb(%s): %s", tdb->name, ptr));
-	free(ptr);
+	SAFE_FREE(ptr);
 }
 
 /****************************************************************************




--------------------------------------------------------
Dr. Andreas Moroder
Sanitätsbetrieb Brixen - Azienda Sanitaria di Bressanone




More information about the samba-technical mailing list