From ff7f0bb2ab6f75bb69066d5457747a6e877a1c2c Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Tue, 23 Mar 2004 04:14:22 +0000
Subject: [PATCH] Bugfix: upload() would allow upload of duplicate file to
 "invisible" dirs (e.g. sysop or uploads dir) if the file was in the dir's
 database, but not on disk. Cosmetic change: display unpadded filename in
 error strings.

---
 src/sbbs3/upload.cpp | 17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

diff --git a/src/sbbs3/upload.cpp b/src/sbbs3/upload.cpp
index c7e8b23083..90581685fc 100644
--- a/src/sbbs3/upload.cpp
+++ b/src/sbbs3/upload.cpp
@@ -344,19 +344,24 @@ bool sbbs_t::upload(uint dirnum)
 		if(!dir_op(dirnum)) return(false); 
 	}
 	bputs(text[SearchingForDupes]);
+	if(findfile(&cfg,dirnum,f.name)) {
+		bputs(text[SearchedForDupes]);
+		bprintf(text[FileAlreadyOnline],fname);
+		return(false); 	 /* File is already in database */
+	}
 	for(i=k=0;i<usrlibs;i++) {
 		for(j=0;j<usrdirs[i];j++,k++) {
 			outchar('.');
 			if(k && !(k%5))
 				bputs("\b\b\b\b\b     \b\b\b\b\b");
-			if((usrdir[i][j]==dirnum || cfg.dir[usrdir[i][j]]->misc&DIR_DUPES)
+			if(usrdir[i][j]==dirnum)
+				continue;	/* we already checked this dir */
+			if(cfg.dir[usrdir[i][j]]->misc&DIR_DUPES
 				&& findfile(&cfg,usrdir[i][j],f.name)) {
 				bputs(text[SearchedForDupes]);
-				bprintf(text[FileAlreadyOnline],f.name);
+				bprintf(text[FileAlreadyOnline],fname);
 				if(!dir_op(dirnum))
 					return(false); 	 /* File is in database for another dir */
-				if(usrdir[i][j]==dirnum)
-					return(false); /* don't allow duplicates */
 			}
 		}
 	}
@@ -475,7 +480,7 @@ bool sbbs_t::upload(uint dirnum)
 			else {
 				for(i=0;i<batup_total;i++)
 					if(!strcmp(batup_name[i],f.name)) {
-						bprintf(text[FileAlreadyInQueue],f.name);
+						bprintf(text[FileAlreadyInQueue],fname);
 						return(false); 
 					}
 				strcpy(batup_name[batup_total],f.name);
@@ -485,7 +490,7 @@ bool sbbs_t::upload(uint dirnum)
 				batup_alt[batup_total]=altul;
 				batup_total++;
 				bprintf(text[FileAddedToUlQueue]
-					,f.name,batup_total,cfg.max_batup); 
+					,fname,batup_total,cfg.max_batup); 
 			} 
 		} else {
 			for(i=0;i<cfg.total_prots;i++)
-- 
GitLab