diff options
24 files changed, 115 insertions, 91 deletions
diff --git a/data/defscript/events.kvs b/data/defscript/events.kvs index 9376143ae..7e5fd326e 100644 --- a/data/defscript/events.kvs +++ b/data/defscript/events.kvs @@ -17,7 +17,7 @@ event(OnConsolePopupRequest,default) event(OnChannelLinkPopupRequest,default) { - if($0 != "") popup.show channelpopup.show $0; + if($0 != "") popup.show channelpopup $0; } event(OnQueryPopupRequest,default) @@ -114,10 +114,10 @@ event(OnURLLinkClick,default) event(OnURLLinkPopupRequest,URL popup) { - popup.show urlpopup.show $0 + popup.show urlpopup $0 } event(OnHostLinkPopupRequest,default) { - popup.show hostpopup.show $0; + popup.show hostpopup $0; } diff --git a/src/kvilib/core/kvi_qstring.cpp b/src/kvilib/core/kvi_qstring.cpp index ca3c346ce..c3fc00577 100644 --- a/src/kvilib/core/kvi_qstring.cpp +++ b/src/kvilib/core/kvi_qstring.cpp @@ -1337,4 +1337,30 @@ namespace KviQString pcBuffer++; } } + + void escapeKvs(QString * szData, uint uFlags) + { + // escape any $;\% + szData->replace("\\","\\\\"); + szData->replace("\"","\\\""); + szData->replace(";","\\;"); + if(!(uFlags & PermitFunctions)) + szData->replace("$","\\$"); + if(!(uFlags & PermitVariables)) + szData->replace("%","\\%"); + if(!(uFlags & PermitMultiLine)) + { + szData->replace("\r"," "); + szData->replace("\n"," "); + } + if(uFlags & EscapeSpace) + szData->replace(" ","\\ "); + + /* + szData->replace("(","\\("); + szData->replace(")","\\)"); + szData->replace("-","\\-"); + szData->replace("+","\\+"); + */ + } } diff --git a/src/kvilib/core/kvi_qstring.h b/src/kvilib/core/kvi_qstring.h index 29ce05bfd..2ad7511cd 100644 --- a/src/kvilib/core/kvi_qstring.h +++ b/src/kvilib/core/kvi_qstring.h @@ -46,6 +46,14 @@ */ namespace KviQString { + enum EscapeKvsFlags + { + EscapeSpace = 0x1, + PermitVariables = 0x2, + PermitFunctions = 0x4, + PermitMultiLine = 0x8 + }; + /** * \brief A global empty string (note that this is ALSO NULL under Qt 3.x) */ @@ -830,6 +838,13 @@ namespace KviQString return szNumber.toULongLong(bOk); #endif } + + /** + * \brief Escapes any kvs special character from a string + * \param szData The string to escape + * \return void + */ + extern KVILIB_API void escapeKvs(QString * szData, uint uFlags = 0); } #endif //_KVI_QSTRING_H_ diff --git a/src/kvirc/kernel/kvi_coreactions.cpp b/src/kvirc/kernel/kvi_coreactions.cpp index 9010df36b..f5e174fa6 100644 --- a/src/kvirc/kernel/kvi_coreactions.cpp +++ b/src/kvirc/kernel/kvi_coreactions.cpp @@ -957,8 +957,10 @@ void KviChangeUserModeAction::popupActivated(int id) if(idx < text.length()) { QChar m = text[idx]; + QString szNick = c->connection()->userInfo()->nickName(); + KviQString::escapeKvs(&szNick); QString command = "mode "; - command.append(c->connection()->userInfo()->nickName()); + command.append(szNick); command.append(c->connection()->userInfo()->hasUserMode(m) ? " -" : " +"); command.append(m); KviKvsScript::run(command,c); diff --git a/src/kvirc/kernel/kvi_ircconnection.cpp b/src/kvirc/kernel/kvi_ircconnection.cpp index fb9e95ab0..c2156047b 100644 --- a/src/kvirc/kernel/kvi_ircconnection.cpp +++ b/src/kvirc/kernel/kvi_ircconnection.cpp @@ -1125,9 +1125,7 @@ void KviIrcConnection::useRealName(const QString &szRealName) if(!szRealNameBuffer.isEmpty()) { - szRealNameBuffer.replace(";","\\;"); - szRealNameBuffer.replace("\n"," "); - szRealNameBuffer.replace("\r"," "); + KviQString::escapeKvs(&szRealNameBuffer, KviQString::PermitVariables | KviQString::PermitFunctions); KviKvsVariant vRet; if(KviKvsScript::evaluate(szRealNameBuffer,console(),0,&vRet)) diff --git a/src/kvirc/kernel/kvi_irccontext.cpp b/src/kvirc/kernel/kvi_irccontext.cpp index e8b48404a..8cbc9be49 100644 --- a/src/kvirc/kernel/kvi_irccontext.cpp +++ b/src/kvirc/kernel/kvi_irccontext.cpp @@ -870,10 +870,9 @@ void KviIrcContext::terminateConnectionRequest(bool bForce, const QString & szQu { KVS_TRIGGER_EVENT_0(KviEvent_OnDisconnectRequest,m_pConsole); QString szQuit = szQuitMsg; - if(szQuit.isEmpty())szQuit = KVI_OPTION_STRING(KviOption_stringQuitMessage); - szQuit.replace(";","\\;"); - szQuit.replace("\n"," "); - szQuit.replace("\r"," "); + if(szQuit.isEmpty()) + szQuit = KVI_OPTION_STRING(KviOption_stringQuitMessage); + KviQString::escapeKvs(&szQuit, KviQString::PermitVariables | KviQString::PermitFunctions); QString buffer; KviKvsVariant ret; if(KviKvsScript::evaluate(szQuit,console(),0,&ret)) diff --git a/src/kvirc/kernel/kvi_userinput.cpp b/src/kvirc/kernel/kvi_userinput.cpp index 52fa5d94e..e1fbef7b8 100644 --- a/src/kvirc/kernel/kvi_userinput.cpp +++ b/src/kvirc/kernel/kvi_userinput.cpp @@ -83,7 +83,7 @@ namespace KviUserInput static QString szUserFriendlyCommandlineContext(__tr2qs("commandline::userfriendly")); QString szCmd = szData; - escapeString(szCmd); + KviQString::escapeKvs(&szCmd); KviKvsScript kvs(szContext.isEmpty() ? szUserFriendlyCommandlineContext : szContext,szCmd); return (kvs.run(pWindow,0,0) != KviKvsScript::Error); @@ -153,18 +153,4 @@ namespace KviUserInput } } } - - void escapeString(QString & szData) - { - // escape any -$;\%( - szData.replace("\\","\\\\"); - szData.replace("\"","\\\""); - szData.replace("$","\\$"); - szData.replace("%","\\%"); - szData.replace("(","\\("); - szData.replace(")","\\)"); - szData.replace(";","\\;"); - szData.replace("-","\\-"); - szData.replace("+","\\+"); - } }; diff --git a/src/kvirc/kvs/kvi_kvs_corefunctions_af.cpp b/src/kvirc/kvs/kvi_kvs_corefunctions_af.cpp index ba0ccb564..f14101c2c 100644 --- a/src/kvirc/kvs/kvi_kvs_corefunctions_af.cpp +++ b/src/kvirc/kvs/kvi_kvs_corefunctions_af.cpp @@ -39,7 +39,7 @@ #include "kvi_ircuserdb.h" #include "kvi_frame.h" #include "kvi_statusbar.h" -#include "kvi_userinput.h" +#include "kvi_qstring.h" #include "kvi_sslmaster.h" #include "kvi_options.h" @@ -1183,7 +1183,7 @@ namespace KviKvsCoreFunctions KVSCF_PARAMETER("text",KVS_PT_NONEMPTYSTRING,0,szData) KVSCF_PARAMETERS_END - KviUserInput::escapeString(szData); + KviQString::escapeKvs(&szData); KVSCF_pRetBuffer->setString(szData); return true; diff --git a/src/kvirc/kvs/kvi_kvs_coresimplecommands_af.cpp b/src/kvirc/kvs/kvi_kvs_coresimplecommands_af.cpp index d94f19626..3a26b8aab 100644 --- a/src/kvirc/kvs/kvi_kvs_coresimplecommands_af.cpp +++ b/src/kvirc/kvs/kvi_kvs_coresimplecommands_af.cpp @@ -941,6 +941,7 @@ namespace KviKvsCoreSimpleCommands if(KVSCSC_pSwitches->find('d',"deep"))szSwitches.append("-d "); if(KVSCSC_pSwitches->find('q',"quiet"))szSwitches.append("-q "); + KviQString::escapeKvs(&szParams); KviKvsScript s("delpopupitem","popup.delitem " + szSwitches + szParams); s.run(KVSCSC_pContext->window()); return true; @@ -1358,7 +1359,7 @@ namespace KviKvsCoreSimpleCommands try to eval the string built by concatenating "echo" and the result of [fnc]$channel.name[/fnc] inside a channel named "#test;quit" (yes, that's a valid channel name) you'll obtain a disconnection as a side effect. To avoid this you need to use [fnc]$escape[/fnc]() around - [fnc]$channel.name[/fnc]. + [fnc]$chan.name[/fnc]. @examples: [example] [comment]# evaluate a variable command[/comment] diff --git a/src/kvirc/kvs/kvi_kvs_coresimplecommands_gl.cpp b/src/kvirc/kvs/kvi_kvs_coresimplecommands_gl.cpp index f21c3de4d..2fc74720b 100644 --- a/src/kvirc/kvs/kvi_kvs_coresimplecommands_gl.cpp +++ b/src/kvirc/kvs/kvi_kvs_coresimplecommands_gl.cpp @@ -158,6 +158,7 @@ namespace KviKvsCoreSimpleCommands if(szParams.endsWith("()")) szParams.chop(2); + KviQString::escapeKvs(&szParams); KviKvsScript s("help","help.open " + szSwitches + szParams); s.run(KVSCSC_pContext->window()); diff --git a/src/kvirc/kvs/kvi_kvs_variant.cpp b/src/kvirc/kvs/kvi_kvs_variant.cpp index bf4882e15..fc5d4f52d 100644 --- a/src/kvirc/kvs/kvi_kvs_variant.cpp +++ b/src/kvirc/kvs/kvi_kvs_variant.cpp @@ -42,7 +42,7 @@ KviKvsVariant::KviKvsVariant(QString * pString, bool bEscape) m_pData->m_eType = KviKvsVariantData::String; m_pData->m_uRefs = 1; m_pData->m_u.pString = pString; - if(bEscape) escapeString(m_pData->m_u.pString); + if(bEscape) KviQString::escapeKvs(m_pData->m_u.pString); } KviKvsVariant::KviKvsVariant(const QString &szString, bool bEscape) @@ -51,7 +51,7 @@ KviKvsVariant::KviKvsVariant(const QString &szString, bool bEscape) m_pData->m_eType = KviKvsVariantData::String; m_pData->m_uRefs = 1; m_pData->m_u.pString = new QString(szString); - if(bEscape) escapeString(m_pData->m_u.pString); + if(bEscape) KviQString::escapeKvs(m_pData->m_u.pString); } KviKvsVariant::KviKvsVariant(const char * szString, bool bEscape) @@ -60,7 +60,7 @@ KviKvsVariant::KviKvsVariant(const char * szString, bool bEscape) m_pData->m_eType = KviKvsVariantData::String; m_pData->m_uRefs = 1; m_pData->m_u.pString = new QString(QString::fromUtf8(szString)); - if(bEscape) escapeString(m_pData->m_u.pString); + if(bEscape) KviQString::escapeKvs(m_pData->m_u.pString); } KviKvsVariant::KviKvsVariant(KviKvsArray * pArray) @@ -1621,13 +1621,4 @@ int KviKvsVariant::compare(const KviKvsVariant * pOther,bool bPreferNumeric) con } return CMP_THISGREATER; // should never happen -} - -void KviKvsVariant::escapeString(QString * szData) -{ - // escape any \$%; - szData->replace("\\","\\\\"); - szData->replace("\"","\\\""); - szData->replace("$","\\$"); - szData->replace(";","\\;"); }
\ No newline at end of file diff --git a/src/kvirc/kvs/kvi_kvs_variant.h b/src/kvirc/kvs/kvi_kvs_variant.h index 937d5047b..e82851266 100644 --- a/src/kvirc/kvs/kvi_kvs_variant.h +++ b/src/kvirc/kvs/kvi_kvs_variant.h @@ -199,13 +199,6 @@ private: static KviKvsVariant* unserializeRealOrInteger(const QChar** aux); static KviKvsVariant* unserializeReal(const QChar** aux,QString& data); static KviKvsVariant* unserializeInteger(const QChar** aux,QString& data); - - /** - * \brief Escapes any kvs special character from a string - * \param szData The string to escape - * \return void - */ - static void escapeString(QString * szData); }; #include "kvi_kvs_array.h" diff --git a/src/kvirc/sparser/kvi_sp_ctcp.cpp b/src/kvirc/sparser/kvi_sp_ctcp.cpp index 326bab9c3..2b67e0fac 100644 --- a/src/kvirc/sparser/kvi_sp_ctcp.cpp +++ b/src/kvirc/sparser/kvi_sp_ctcp.cpp @@ -1647,16 +1647,15 @@ void KviServerParser::parseCtcpReplyAvatar(KviCtcpMessage *msg) QString szLocalFile = szRemoteFile; g_pIconManager->urlToCachedFileName(szLocalFile); g_pApp->getLocalKvircDirectory(szLocalFilePath,KviApp::Avatars,szLocalFile); - szLocalFilePath.replace('\\',"\\\\"); // <-- this is especially for windows + KviQString::escapeKvs(&szLocalFilePath, KviQString::EscapeSpace); QString szCommand = "http.get -w=nm "; unsigned int uMaxSize = KVI_OPTION_UINT(KviOption_uintMaximumRequestedAvatarSize); if(uMaxSize > 0)KviQString::appendFormatted(szCommand,"-m=%u ",uMaxSize); szRemoteFile = szRemoteFile.replace(";","%3B"); szRemoteFile = szRemoteFile.replace("\"","%22"); szCommand += "\""+szRemoteFile+"\""; - szCommand += " \""; + szCommand += " "; szCommand += szLocalFilePath; - szCommand += "\""; if(KviKvsScript::run(szCommand,msg->msg->console())) { diff --git a/src/kvirc/sparser/kvi_sp_literal.cpp b/src/kvirc/sparser/kvi_sp_literal.cpp index 166e6c510..b401aafd5 100644 --- a/src/kvirc/sparser/kvi_sp_literal.cpp +++ b/src/kvirc/sparser/kvi_sp_literal.cpp @@ -571,7 +571,8 @@ void KviServerParser::parseLiteralKick(KviIrcMessage *msg) if(KVS_TRIGGER_EVENT_4_HALTED(KviEvent_OnMeKick,chan, szNick,szUser,szHost,szKickMsg)) msg->setHaltOutput(); - if(!KVI_OPTION_STRING(KviOption_stringOnMeKickedSound).isEmpty()) KviKvsScript::run("snd.play $0",0,new KviKvsVariantList(new KviKvsVariant(KVI_OPTION_STRING(KviOption_stringOnMeKickedSound)))); + if(!KVI_OPTION_STRING(KviOption_stringOnMeKickedSound).isEmpty()) + KviKvsScript::run("snd.play $0",0,new KviKvsVariantList(new KviKvsVariant(KVI_OPTION_STRING(KviOption_stringOnMeKickedSound)))); QString szPass = chan->hasChannelMode('k') ? chan->channelModeParam('k') : ""; diff --git a/src/kvirc/ui/kvi_channel.cpp b/src/kvirc/ui/kvi_channel.cpp index 6257c8adb..ea7e50bac 100644 --- a/src/kvirc/ui/kvi_channel.cpp +++ b/src/kvirc/ui/kvi_channel.cpp @@ -1620,8 +1620,7 @@ void KviChannel::closeEvent(QCloseEvent * e) if(connection()) { QString szTmp = KVI_OPTION_STRING(KviOption_stringPartMessage); - szTmp.replace(";","\\;"); - szTmp.replace("\n"," "); + KviQString::escapeKvs(&szTmp, KviQString::PermitVariables | KviQString::PermitFunctions); KviKvsVariant vRet; if(KviKvsScript::evaluate(szTmp,this,0,&vRet)) diff --git a/src/kvirc/ui/kvi_input_editor.cpp b/src/kvirc/ui/kvi_input_editor.cpp index 6f7d8d67d..c503c819d 100644 --- a/src/kvirc/ui/kvi_input_editor.cpp +++ b/src/kvirc/ui/kvi_input_editor.cpp @@ -39,6 +39,7 @@ #include "kvi_mdimanager.h" #include "kvi_mirccntrl.h" #include "kvi_options.h" +#include "kvi_qstring.h" #include "kvi_out.h" #include "kvi_tal_popupmenu.h" #include "kvi_texticonwin.h" @@ -190,8 +191,8 @@ void KviInputEditor::dropEvent(QDropEvent * e) if(szPath.endsWith(KVI_FILEEXTENSION_SCRIPT,Qt::CaseInsensitive)) { //script, parse it - szPath.prepend("PARSE \""); - szPath.append("\""); + KviQString::escapeKvs(&szPath, KviQString::EscapeSpace); + szPath.prepend("PARSE "); if(m_pKviWindow) KviKvsScript::run(szPath,m_pKviWindow); } else { @@ -1029,11 +1030,11 @@ void KviInputEditor::stopPasteSlow() void KviInputEditor::pasteFile() { QString szTmp = QFileDialog::getOpenFileName(this,"Choose a file","",""); - if(szTmp != "") + if(!szTmp.isEmpty()) { - szTmp.replace("\"", "\\\""); - QString szTmp2 = QString("spaste.file \"%1\"").arg(szTmp); - KviKvsScript::run(szTmp2,g_pActiveWindow); + KviQString::escapeKvs(&szTmp, KviQString::EscapeSpace); + szTmp.prepend("spaste.file "); + KviKvsScript::run(szTmp, g_pActiveWindow); m_bSpSlowFlag = true; } } @@ -1437,16 +1438,10 @@ void KviInputEditor::getWordBeforeCursor(QString & szBuffer, bool * bIsFirstWord void KviInputEditor::completionEscapeUnsafeToken(QString &szToken) { - szToken.replace("\\","\\\\"); - szToken.replace(";","\\;"); - szToken.replace("$","\\$"); - szToken.replace("%","\\%"); - szToken.replace("\"","\\\""); - szToken.replace(" ","\\ "); + if(!((KviInput *)(m_pInputParent))->isUserFriendly()) + KviQString::escapeKvs(&szToken, KviQString::EscapeSpace); } - - void KviInputEditor::completion(bool bShift) { // FIXME: Spaces in directory completion can mess everything completely @@ -1587,7 +1582,7 @@ void KviInputEditor::completion(bool bShift) } } - if(bInCommand) + if(bInCommand && !bIsCommand) { // escape crazy things like Nick\nquit completionEscapeUnsafeToken(szMatch); diff --git a/src/kvirc/ui/kvi_userlistview.cpp b/src/kvirc/ui/kvi_userlistview.cpp index dca490b77..cd7392d56 100644 --- a/src/kvirc/ui/kvi_userlistview.cpp +++ b/src/kvirc/ui/kvi_userlistview.cpp @@ -294,7 +294,7 @@ void KviUserListView::emitRightClick() QString szNicks; appendSelectedNicknames(szNicks); KviKvsVariantList vList; - vList.append(szNicks, true); + vList.append(szNicks); KviKvsEventManager::instance()->trigger(iEv,m_pKviWindow,&vList); } else { g_pApp->checkSuggestRestoreDefaultScript(); diff --git a/src/modules/addon/addonfunctions.cpp b/src/modules/addon/addonfunctions.cpp index f9248e977..7efd047e1 100644 --- a/src/modules/addon/addonfunctions.cpp +++ b/src/modules/addon/addonfunctions.cpp @@ -229,17 +229,8 @@ namespace KviAddonFunctions } // Now we have all stuff in ~/.config/KVIrc/tmp/$rand - if(! - KviKvsScript::run( - QString::fromAscii("parse \"%1/install.kvs\"") - .arg( - szUnpackPath - .replace("\\","\\\\") - .replace("\"","\\\"") - ), - g_pActiveWindow - ) - ) + KviQString::escapeKvs(&szUnpackPath, KviQString::EscapeSpace); + if(!KviKvsScript::run(QString::fromAscii("parse %1/install.kvs").arg(szUnpackPath), g_pActiveWindow)) { // Parsing the script failed // However, the user should already be notified via normal script output. diff --git a/src/modules/addon/managementdialog.cpp b/src/modules/addon/managementdialog.cpp index fa3e31dd0..bab866c2b 100644 --- a/src/modules/addon/managementdialog.cpp +++ b/src/modules/addon/managementdialog.cpp @@ -267,6 +267,7 @@ void KviScriptManagementDialog::uninstallScript() void KviScriptManagementDialog::getMoreScripts() { + // If change this introducing not-fixed text, remember to escape this using KviQString::escapeKvs()! KviKvsScript::run("openurl http://www.kvirc.net/?id=addons&version=" KVI_VERSION "." KVI_SOURCES_DATE,g_pActiveWindow); } diff --git a/src/modules/avatar/libkviavatar.cpp b/src/modules/avatar/libkviavatar.cpp index 578d009b5..d7b46ea48 100644 --- a/src/modules/avatar/libkviavatar.cpp +++ b/src/modules/avatar/libkviavatar.cpp @@ -128,8 +128,8 @@ void KviAsyncAvatarSelectionDialog::okClicked() if(!m_szAvatarName.isEmpty()) { QString tmp = m_szAvatarName; - tmp.replace("\\","\\\\",Qt::CaseInsensitive); - QString szBuffer=QString("avatar.set \"%1\"").arg(tmp); + KviQString::escapeKvs(&tmp, KviQString::EscapeSpace); + QString szBuffer=QString("avatar.set %1").arg(tmp); KviKvsScript::run(szBuffer,m_pConnection->console()); } @@ -237,8 +237,8 @@ static bool avatar_kvs_cmd_set(KviKvsModuleCommandCall * c) g_pIconManager->urlToCachedFileName(szLocalFile); g_pApp->getLocalKvircDirectory(szLocalFilePath,KviApp::Avatars,szLocalFile); - szLocalFilePath.replace("\\","\\\\",Qt::CaseInsensitive); - + KviQString::escapeKvs(&szAvatar); + KviQString::escapeKvs(&szLocalFilePath); QString szCommand = "http.get -w=nm "; szCommand += szAvatar; szCommand += " "; diff --git a/src/modules/channelsjoin/channelsjoinwindow.cpp b/src/modules/channelsjoin/channelsjoinwindow.cpp index 0b5919c85..eeef183fa 100644 --- a/src/modules/channelsjoin/channelsjoinwindow.cpp +++ b/src/modules/channelsjoin/channelsjoinwindow.cpp @@ -29,6 +29,7 @@ #include "kvi_selectors.h" #include "kvi_app.h" #include "kvi_string.h" +#include "kvi_qstring.h" #include "kvi_iconmanager.h" #include "kvi_console.h" #include "kvi_regchan.h" @@ -301,6 +302,9 @@ void KviChannelsJoinWindow::joinClicked() if(szTmp.isEmpty()) return; + KviQString::escapeKvs(&szTmp); + KviQString::escapeKvs(&szPass); + QString szCmd = "join "; szCmd += szTmp; szCmd += " "; @@ -327,6 +331,7 @@ void KviChannelsJoinWindow::regClicked() if(szTmp.isEmpty()) return; + KviQString::escapeKvs(&szTmp); QString szCmd = "regchan.add "; szCmd += szTmp; diff --git a/src/modules/classeditor/classeditor.cpp b/src/modules/classeditor/classeditor.cpp index 662b018a0..48d750dfa 100644 --- a/src/modules/classeditor/classeditor.cpp +++ b/src/modules/classeditor/classeditor.cpp @@ -1559,6 +1559,9 @@ void KviClassEditor::newClass() return; KviClassEditorTreeWidgetItem * pItem = newItem(szClassName,KviClassEditorTreeWidgetItem::Class); + KviQString::escapeKvs(&szClassName, KviQString::EscapeSpace); + KviQString::escapeKvs(&szinheritsClassName, KviQString::EscapeSpace); + QString szClass = "class\("; szClass += szClassName + "," + szinheritsClassName; szClass += "){}\n"; diff --git a/src/modules/dcc/send.cpp b/src/modules/dcc/send.cpp index 4d2c1a10a..8d9c495c5 100644 --- a/src/modules/dcc/send.cpp +++ b/src/modules/dcc/send.cpp @@ -1238,7 +1238,10 @@ void KviDccFileTransfer::retryDCC() QString szRemoteNick = m_pDescriptor->remoteNick(); QString szFileName = m_pDescriptor->localFileName(); QString szId = m_pDescriptor->idString(); - QString szCommand = "dcc.send -r=$console($dcc.irccontext(" + szId + ")) " + szRemoteNick + " " + "\"" + szFileName + "\""; + KviQString::escapeKvs(&szRemoteNick, KviQString::EscapeSpace); + KviQString::escapeKvs(&szFileName, KviQString::EscapeSpace); + + QString szCommand = "dcc.send -r=$console($dcc.irccontext(" + szId + ")) " + szRemoteNick + " " + szFileName; KviKvsScript::run(szCommand,g_pActiveWindow); } @@ -1248,7 +1251,10 @@ void KviDccFileTransfer::retryTDCC() QString szRemoteNick = m_pDescriptor->remoteNick(); QString szFileName = m_pDescriptor->localFileName(); QString szId = m_pDescriptor->idString(); - QString szCommand = "dcc.send -r=$console($dcc.irccontext(" + szId + ")) -t " + szRemoteNick + " " + "\"" + szFileName + "\""; + KviQString::escapeKvs(&szRemoteNick, KviQString::EscapeSpace); + KviQString::escapeKvs(&szFileName, KviQString::EscapeSpace); + + QString szCommand = "dcc.send -r=$console($dcc.irccontext(" + szId + ")) -t " + szRemoteNick + " " + szFileName; KviKvsScript::run(szCommand,g_pActiveWindow); } @@ -1258,7 +1264,10 @@ void KviDccFileTransfer::retryRevDCC() QString szRemoteNick = m_pDescriptor->remoteNick(); QString szFileName = m_pDescriptor->localFileName(); QString szId = m_pDescriptor->idString(); - QString szCommand = "dcc.rsend -z -r=$console($dcc.irccontext(" + szId + ")) " + szRemoteNick + " " + "\"" + szFileName + "\""; + KviQString::escapeKvs(&szRemoteNick, KviQString::EscapeSpace); + KviQString::escapeKvs(&szFileName, KviQString::EscapeSpace); + + QString szCommand = "dcc.rsend -z -r=$console($dcc.irccontext(" + szId + ")) " + szRemoteNick + " " + szFileName; KviKvsScript::run(szCommand,g_pActiveWindow); } diff --git a/src/modules/url/libkviurl.cpp b/src/modules/url/libkviurl.cpp index 5c6b1ef5d..e1bbdec03 100644 --- a/src/modules/url/libkviurl.cpp +++ b/src/modules/url/libkviurl.cpp @@ -39,6 +39,7 @@ #include "kvi_tal_popupmenu.h" #include "kvi_window.h" #include "kvi_options.h" +#include "kvi_qstring.h" #include "kvi_out.h" #include <QFileDialog> @@ -307,7 +308,9 @@ void UrlDialog::findtext() void UrlDialog::dblclk_url(QTreeWidgetItem *item, int) { QString cmd="openurl "; - cmd.append(item->text(0)); + QString szUrl = item->text(0); + KviQString::escapeKvs(&szUrl); + cmd.append(szUrl); KviKvsScript::run(cmd,this); } @@ -344,12 +347,18 @@ void UrlDialog::contextMenu(const QPoint &point) void UrlDialog::sayToWin(QAction * act) { KviWindow *wnd = g_pApp->findWindowByCaption(act->text()); - QString say=QString("PRIVMSG %1 %2").arg(wnd->windowName(), m_szUrl); if(wnd) { + QString szUrl = m_szUrl; + QString szWindow = wnd->windowName(); + KviQString::escapeKvs(&szUrl); + KviQString::escapeKvs(&szWindow); + QString say=QString("PRIVMSG %1 %2").arg(szWindow, szUrl); KviKvsScript::run(say,wnd); g_pFrame->setActiveWindow(wnd); - } else QMessageBox::warning(0,__tr2qs("Warning - KVIrc"),__tr2qs("Window not found."),QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton); + } else { + QMessageBox::warning(0,__tr2qs("Warning - KVIrc"),__tr2qs("Window not found."),QMessageBox::Ok,QMessageBox::NoButton,QMessageBox::NoButton); + } } QPixmap *UrlDialog::myIconPtr() |
