File kvirc-dcc_vul.diff of Package kvirc

Index: src/modules/dcc/chat.cpp
===================================================================
--- src/modules/dcc/chat.cpp	(revision 4334)
+++ src/modules/dcc/chat.cpp	(revision 4430)
@@ -231,7 +231,7 @@
 			struct in_addr a;
 			if(kvi_stringIpToBinaryIp(ip.ptr(),&a))ip.setNum(htonl(a.s_addr));
 
-			QString szReq = QString("PRIVMSG %1 :%2DCC %3 chat %4 %5").arg(m_pDescriptor->szNick).arg((char)0x01).arg(m_pDescriptor->szType).arg(ip.ptr()).arg(port);
+			QString szReq = QString("PRIVMSG %1 :%2DCC %3 chat %4 %5").arg(m_pDescriptor->szNick, QChar(0x01), m_pDescriptor->szType, ip.ptr()).arg(port);
 
 			if(m_pDescriptor->isZeroPortRequest())	
 			{
@@ -280,11 +280,11 @@
 {
 	QString tmp = QString("DCC %1 %2@%3:%4").arg(
 #ifdef COMPILE_SSL_SUPPORT
-		m_pDescriptor->bIsSSL ? "SChat" : "Chat").arg(
+		m_pDescriptor->bIsSSL ? "SChat" : "Chat", 
 #else
-		"Chat").arg(
+		"Chat", 
 #endif
-		m_pDescriptor->szNick).arg(m_pDescriptor->szIp).arg(m_pDescriptor->szPort);
+		m_pDescriptor->szNick, m_pDescriptor->szIp, m_pDescriptor->szPort);
 
 	m_szPlainTextCaption = tmp;
 
Index: src/modules/dcc/requests.cpp
===================================================================
--- src/modules/dcc/requests.cpp	(revision 4334)
+++ src/modules/dcc/requests.cpp	(revision 4430)
@@ -80,7 +80,7 @@
 
 	if(KVI_OPTION_BOOL(KviOption_boolNotifyFailedDccHandshakes))
 	{
-		QString szError = QString("Sorry, your DCC %1 request can't be satisfied: %2").arg(dcc->szType.ptr()).arg(errText);
+		QString szError = QString("Sorry, your DCC %1 request can't be satisfied: %2").arg(dcc->szType.ptr(), errText);
 		dcc_module_reply_errmsg(dcc,szError);
 	}
 }
@@ -454,6 +454,16 @@
 		dcc->szParam1.cutToLast('/');
 	}
 
+	if(dcc->szParam1.contains("%2F"))
+	{
+		if(!dcc->ctcpMsg->msg->haltOutput())
+		{
+			dcc->ctcpMsg->msg->console()->output(KVI_OUT_DCCMSG,
+				__tr2qs_ctx("The above request is broken: The filename contains path components, stripping the leading path and trying to continue","dcc"),dcc->szParam1.ptr());
+		}		
+		dcc->szParam1.cutToLast("%2F");
+	}
+
 	KviStr szExtensions = dcc->szType;
 	szExtensions.cutRight(4); // cut off SEND
 
Index: src/modules/dcc/broker.cpp
===================================================================
--- src/modules/dcc/broker.cpp	(revision 4334)
+++ src/modules/dcc/broker.cpp	(revision 4430)
@@ -268,7 +268,7 @@
 		QString tmp = __tr2qs_ctx( \
 				"<b>%1 [%2@%3]</b> requests a " \
 				"<b>Direct Client Connection</b> in <b>%4</b> mode.<br>", \
-				"dcc").arg(dcc->szNick).arg(dcc->szUser).arg(dcc->szHost).arg(dcc->szType);
+				"dcc").arg(dcc->szNick, dcc->szUser, dcc->szHost, dcc->szType);
 
 #ifdef COMPILE_SSL_SUPPORT
 		if(dcc->bIsSSL)tmp += __tr2qs_ctx("The connection will be secured using SSL.<br>","dcc");
@@ -282,7 +282,7 @@
 		} else {
 			tmp += __tr2qs_ctx( \
 					"The connection target will be host <b>%1</b> on port <b>%2</b><br>" \
-					,"dcc").arg(dcc->szIp).arg(dcc->szPort);
+					,"dcc").arg(dcc->szIp, dcc->szPort);
 		}
 
 
@@ -315,7 +315,7 @@
 	KviStr szSubProto = dcc->szType;
 	szSubProto.toLower();
 
-	QString tmp = QString("dcc: %1 %2@%3:%4").arg(szSubProto.ptr()).arg(dcc->szNick).arg(dcc->szIp).arg(dcc->szPort);
+	QString tmp = QString("dcc: %1 %2@%3:%4").arg(szSubProto.ptr(), dcc->szNick, dcc->szIp, dcc->szPort);
 	KviDccChat * chat = new KviDccChat(dcc->console()->frame(),dcc,tmp.utf8().data());
 
 	bool bMinimized = dcc->bOverrideMinimize ? dcc->bShowMinimized : \
@@ -341,7 +341,7 @@
 					"<b>Direct Client Connection</b> in <b>VOICE</b> mode.<br>" \
 					"The connection target will be host <b>%4</b> on port <b>%5</b><br>" \
 				,"dcc" \
-			).arg(dcc->szNick).arg(dcc->szUser).arg(dcc->szHost).arg(dcc->szIp).arg(dcc->szPort);
+			).arg(dcc->szNick, dcc->szUser, dcc->szHost, dcc->szIp).arg(dcc->szPort);
 
 		KviDccAcceptBox * box = new KviDccAcceptBox(this,dcc,tmp,__tr2qs_ctx("DCC VOICE request","dcc"));
 		m_pBoxList->append(box);
@@ -412,7 +412,7 @@
 					"<b>Direct Client Connection</b> in <b>CANVAS</b> mode.<br>" \
 					"The connection target will be host <b>%4</b> on port <b>%5</b><br>" \
 				,"dcc" \
-			).arg(dcc->szNick).arg(dcc->szUser).arg(dcc->szHost).arg(dcc->szIp).arg(dcc->szPort);
+			).arg(dcc->szNick, dcc->szUser, dcc->szHost, dcc->szIp).arg(dcc->szPort);
 
 		KviDccAcceptBox * box = new KviDccAcceptBox(this,dcc,tmp,__tr2qs_ctx("DCC CANVAS request","dcc"));
 		m_pBoxList->append(box);
@@ -505,9 +505,9 @@
 						"<b>%5</b> large.<br>" \
 						"The connection target will be host <b>%6</b> on port <b>%7</b><br>" \
 					,"dcc" \
-				).arg(dcc->szNick).arg(dcc->szUser).arg(dcc->szHost).arg(
-				dcc->szFileName).arg(KviQString::makeSizeReadable(dcc->szFileSize.toULong())).arg(
-					dcc->szIp).arg(dcc->szPort);
+				).arg(dcc->szNick, dcc->szUser, dcc->szHost, 
+				dcc->szFileName).arg(KviQString::makeSizeReadable(dcc->szFileSize.toULong()), 
+					dcc->szIp, dcc->szPort);
 
 		} else {
 			// passive: we will be listening!
@@ -518,7 +518,7 @@
 						"<b>%5</b> large.<br>" \
 						"You will be the passive side of the connection.<br>" \
 					,"dcc" \
-				).arg(dcc->szNick).arg(dcc->szUser).arg(dcc->szHost).arg(
+				).arg(dcc->szNick, dcc->szUser, dcc->szHost, 
 					dcc->szFileName).arg(KviQString::makeSizeReadable(dcc->szFileSize.toULong()));
 		}
 
@@ -669,7 +669,7 @@
 							"<b>auto-rename</b> the new file, or<br>" \
 							"<b>resume</b> an incomplete download?" \
 						,"dcc" \
-					).arg(dcc->szLocalFileName).arg(KviQString::makeSizeReadable(fi.size()));
+					).arg(dcc->szLocalFileName, KviQString::makeSizeReadable(fi.size()));
 			} else {
 				bDisableResume = true;
 				// the file on disk is larger or equal to the remote one
Index: src/modules/dcc/send.cpp
===================================================================
--- src/modules/dcc/send.cpp	(revision 4334)
+++ src/modules/dcc/send.cpp	(revision 4430)
@@ -1236,14 +1236,14 @@
 					if(iW2 > 0)p->fillRect(5 + iL2,5,iW2,10,bIsTerminated ? QColor(150,130,110) : QColor(220,170,100));
 					p->fillRect(5,5,iL2,10,bIsTerminated ? QColor(140,110,110) : QColor(200,100,100));
 
-					txt = QString(__tr2qs_ctx("%1 of %2 (%3%)","dcc")).arg(KviQString::makeSizeReadable(iAckedBytes)).arg(KviQString::makeSizeReadable(m_uTotalFileSize)).arg(dPerc2,0,'f',2);
+					txt = QString(__tr2qs_ctx("%1 of %2 (%3%)","dcc")).arg(KviQString::makeSizeReadable(iAckedBytes), KviQString::makeSizeReadable(m_uTotalFileSize)).arg(dPerc2,0,'f',2);
 				} else {
 					// we are receiving a file or not sending acks
 					double dPerc = (double)(((double)uTransferred) * 100.0) / (double)m_uTotalFileSize;
 					int iL = (int) ((((double)iW) * dPerc) / 100.0);
 					p->fillRect(5,5,iL,10,bIsTerminated ? QColor(140,110,110) : QColor(200,100,100));
 
-					txt = QString(__tr2qs_ctx("%1 of %2 (%3%)","dcc")).arg(KviQString::makeSizeReadable(uTransferred)).arg(KviQString::makeSizeReadable(m_uTotalFileSize)).arg(dPerc,0,'f',2);
+					txt = QString(__tr2qs_ctx("%1 of %2 (%3%)","dcc")).arg(KviQString::makeSizeReadable(uTransferred), KviQString::makeSizeReadable(m_uTotalFileSize)).arg(dPerc,0,'f',2);
 				}
 
 			} else {
@@ -1477,14 +1477,14 @@
 //			if(TRIGGER_EVENT_5PARAM_RETVALUE(KviEvent_OnDCCSendConnected,this,m_pDescriptor->szPort.ptr(),m_pDescriptor->szFileName.ptr(),m_pDescriptor->szNick.ptr(),m_pDescriptor->szUser.ptr(),m_pDescriptor->szHost.ptr()));
 //		}
 //
-		m_szStatusString = __tr2qs_ctx("Contacting host %1 on port %2","dcc").arg(m_pDescriptor->szIp).arg(m_pDescriptor->szPort);
+		m_szStatusString = __tr2qs_ctx("Contacting host %1 on port %2","dcc").arg(m_pDescriptor->szIp, m_pDescriptor->szPort);
 		outputAndLog(m_szStatusString);
 		displayUpdate();
 		return;
 	}
 
 	// PASSIVE CONNECTION
-	m_szStatusString = __tr2qs_ctx("Listening on interface %1 port %2","dcc").arg(m_pMarshal->localIp()).arg(m_pMarshal->localPort());
+	m_szStatusString = __tr2qs_ctx("Listening on interface %1 port %2","dcc").arg(m_pMarshal->localIp(), m_pMarshal->localPort());
 	outputAndLog(m_szStatusString);
 
 	if(m_pDescriptor->bSendRequest)
@@ -1558,7 +1558,7 @@
 					ip.utf8().data(),port.ptr(),
 					&(m_pDescriptor->szLocalFileSize),0x01);
 		}
-		outputAndLog(__tr2qs_ctx("Sent DCC %1 request to %2, waiting for remote client to connect...","dcc").arg(szReq.ptr()).arg(m_pDescriptor->szNick));
+		outputAndLog(__tr2qs_ctx("Sent DCC %1 request to %2, waiting for remote client to connect...","dcc").arg(szReq.ptr(), m_pDescriptor->szNick));
 	} else {
 		outputAndLog(__tr2qs_ctx("DCC %1 request not sent, awaiting manual connection","dcc").arg(m_szDccType.ptr()));
 	}
@@ -1687,8 +1687,8 @@
 
 void KviDccFileTransfer::connected()
 {
-	outputAndLog(__tr2qs_ctx("Connected to %1:%2","dcc").arg(m_pMarshal->remoteIp()).arg(m_pMarshal->remotePort()));
-	outputAndLog(__tr2qs_ctx("Local end is %1:%2","dcc").arg(m_pMarshal->localIp()).arg(m_pMarshal->localPort()));
+	outputAndLog(__tr2qs_ctx("Connected to %1:%2","dcc").arg(m_pMarshal->remoteIp(), m_pMarshal->remotePort()));
+	outputAndLog(__tr2qs_ctx("Local end is %1:%2","dcc").arg(m_pMarshal->localIp(), m_pMarshal->localPort()));
 
 	m_tTransferStartTime = kvi_unixTime();
 
@@ -1769,7 +1769,7 @@
 
 	if(ret != KviError_success)handleMarshalError(ret);
 	else {
-		m_szStatusString = __tr2qs_ctx("Contacting host %1 on port %2","dcc").arg(m_pDescriptor->szIp).arg(m_pDescriptor->szPort);
+		m_szStatusString = __tr2qs_ctx("Contacting host %1 on port %2","dcc").arg(m_pDescriptor->szIp, m_pDescriptor->szPort);
 		outputAndLog(m_szStatusString);
 		displayUpdate();
 	}
openSUSE Build Service is sponsored by