← Back to team overview

linuxdcpp-team team mailing list archive

[Branch ~dcplusplus-team/dcplusplus/trunk] Rev 3024: Protect against sending an empty token in reserveSlot

 

------------------------------------------------------------
revno: 3024
committer: iceman50 <bdcdevel@xxxxxxxxx>
branch nick: dcplusplus
timestamp: Tue 2012-08-07 13:09:26 -0500
message:
  Protect against sending an empty token in reserveSlot
modified:
  dcpp/UploadManager.cpp


--
lp:dcplusplus
https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk

Your team Dcplusplus-team is subscribed to branch lp:dcplusplus.
To unsubscribe from this branch go to https://code.launchpad.net/~dcplusplus-team/dcplusplus/trunk/+edit-subscription
=== modified file 'dcpp/UploadManager.cpp'
--- dcpp/UploadManager.cpp	2012-08-07 14:49:43 +0000
+++ dcpp/UploadManager.cpp	2012-08-07 18:09:26 +0000
@@ -296,8 +296,10 @@
 			auto it = find_if(waitingUsers.cbegin(), waitingUsers.cend(), [&](const UserPtr& u) { return u == aUser.user; });
 			return (it != waitingUsers.cend()) ? it->token : Util::emptyString;
 		};
-		 
-		ClientManager::getInstance()->connect(aUser, userToken());
+		
+		string token;
+		if((token = userToken()) != Util::emptyString)
+			ClientManager::getInstance()->connect(aUser, token);
 	}
 }
 
@@ -583,18 +585,20 @@
 
 // TimerManagerListener
 void UploadManager::on(TimerManagerListener::Second, uint64_t) noexcept {
-	Lock l(cs);
-	UploadList ticks;
+	{
+		Lock l(cs);
+		UploadList ticks;
 
-	for(auto u: uploads) {
-		if(u->getPos() > 0) {
-			ticks.push_back(u);
-			u->tick();
+		for(auto u: uploads) {
+			if(u->getPos() > 0) {
+				ticks.push_back(u);
+				u->tick();
+			}
 		}
+
+		if(!uploads.empty())
+			fire(UploadManagerListener::Tick(), UploadList(uploads));
 	}
-
-	if(!uploads.empty())
-		fire(UploadManagerListener::Tick(), UploadList(uploads));
 		
 	notifyQueuedUsers();
 }