aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Szymon Tomasz Stefanek2010-12-17 01:03:19 +0000
committerGravatar Szymon Tomasz Stefanek2010-12-17 01:03:19 +0000
commita4ca06f453b32175d9de97e25c280e692ae3cb55 (patch)
treee3438576bb742315ba71211a7056339c0fbe186d
parentbetter support for raw 307 (diff)
downloadKVIrc-a4ca06f453b32175d9de97e25c280e692ae3cb55.tar.gz
KVIrc-a4ca06f453b32175d9de97e25c280e692ae3cb55.tar.bz2
KVIrc-a4ca06f453b32175d9de97e25c280e692ae3cb55.zip
Don't allow KviWindow::preprocessMessage to break output
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@5201 17fca916-40b9-46aa-a4ea-0a15b648b75c
-rw-r--r--src/kvirc/kvs/kvi_kvs_corefunctions_af.cpp1
-rw-r--r--src/kvirc/ui/kvi_channel.cpp34
-rw-r--r--src/kvirc/ui/kvi_window.cpp52
3 files changed, 50 insertions, 37 deletions
diff --git a/src/kvirc/kvs/kvi_kvs_corefunctions_af.cpp b/src/kvirc/kvs/kvi_kvs_corefunctions_af.cpp
index cacc3095b..194ed3c4a 100644
--- a/src/kvirc/kvs/kvi_kvs_corefunctions_af.cpp
+++ b/src/kvirc/kvs/kvi_kvs_corefunctions_af.cpp
@@ -1520,6 +1520,7 @@ namespace KviKvsCoreFunctions
if(!szToolTip.isEmpty())KviQString::appendFormatted(szPart,"[!txt]%Q",&szToolTip);
QString szLink;
KviQString::sprintf(szLink,"\r!%Q\r%Q\r",&szPart,&szLinkText);
+
KVSCF_pRetBuffer->setString(szLink);
return true;
}
diff --git a/src/kvirc/ui/kvi_channel.cpp b/src/kvirc/ui/kvi_channel.cpp
index abd126e78..a582a3035 100644
--- a/src/kvirc/ui/kvi_channel.cpp
+++ b/src/kvirc/ui/kvi_channel.cpp
@@ -1829,25 +1829,37 @@ bool KviChannel::eventFilter(QObject * o, QEvent * e)
void KviChannel::preprocessMessage(QString & szMessage)
{
+ // FIXME: slow
+
+ KviIrcConnectionServerInfo * pServerInfo = serverInfo();
+ if(!pServerInfo)
+ return;
+
+ static QString szNonStandardLinkPrefix = QString::fromAscii("\r![");
+
+ if(szMessage.contains(szNonStandardLinkPrefix))
+ return; // contains a non standard link that may contain spaces, do not break it.
+
QStringList strings = szMessage.split(" ",QString::KeepEmptyParts);
for(QStringList::Iterator it = strings.begin(); it != strings.end(); ++it)
{
- if((*it).contains('\r'))
+ QString szTmp = KviMircCntrl::stripControlBytes(*it).trimmed();
+ if(szTmp.length() < 1)
continue;
- QString szTmp = KviMircCntrl::stripControlBytes(*it);
+ if(szTmp.contains('\r'))
+ continue;
+
+ // FIXME: Do we REALLY need this ?
if(findEntry(*it))
*it = QString("\r!n\r%1\r").arg(*it);
- KviIrcConnectionServerInfo * pServerInfo = serverInfo();
- if(pServerInfo)
+
+ if(pServerInfo->supportedChannelTypes().contains(szTmp[0]))
{
- if(pServerInfo->supportedChannelTypes().contains(szTmp[0]))
- {
- if((*it) == szTmp)
- *it = QString("\r!c\r%1\r").arg(*it);
- else
- *it = QString("\r!c%1\r%2\r").arg(szTmp, *it);
- }
+ if((*it) == szTmp)
+ *it = QString("\r!c\r%1\r").arg(*it);
+ else
+ *it = QString("\r!c%1\r%2\r").arg(szTmp, *it);
}
}
szMessage = strings.join(" ");
diff --git a/src/kvirc/ui/kvi_window.cpp b/src/kvirc/ui/kvi_window.cpp
index ec19c0946..7ada04eb8 100644
--- a/src/kvirc/ui/kvi_window.cpp
+++ b/src/kvirc/ui/kvi_window.cpp
@@ -1276,37 +1276,37 @@ void KviWindow::unhighlight()
m_pWindowListItem->unhighlight();
}
-/* This messes up a bit: for example it breaks the WHOIS output where
- escapes are already present (checking for them here would be an overkill).
- This should be eventually done ONLY for remote user message texts
- in the server parser.
-
- Fixed
-*/
-
void KviWindow::preprocessMessage(QString & szMessage)
{
- // slow
+ // FIXME: slow
+
+ if(!m_pConsole)
+ return;
+ if(!m_pConsole->connection())
+ return;
+
+ static QString szNonStandardLinkPrefix = QString::fromAscii("\r![");
+
+ if(szMessage.contains(szNonStandardLinkPrefix))
+ return; // contains a non standard link that may contain spaces, do not break it.
+
+ // FIXME: This STILL breaks $fmtlink() in certain configurations
+
QStringList strings = szMessage.split(" ");
- for ( QStringList::Iterator it = strings.begin(); it != strings.end(); ++it ) {
+ for ( QStringList::Iterator it = strings.begin(); it != strings.end(); ++it )
+ {
QString tmp(*it);
- if(tmp.contains('\r')) continue;
- tmp = KviMircCntrl::stripControlBytes(tmp);
- tmp.trimmed();
- if(m_pConsole)
+ tmp = KviMircCntrl::stripControlBytes(tmp).trimmed();
+ if(tmp.length() < 1)
+ continue;
+ if(tmp.contains('\r'))
+ return;
+ if(m_pConsole->connection()->serverInfo()->supportedChannelTypes().contains(tmp[0]))
{
- if(m_pConsole->connection())
- {
- if(m_pConsole->connection()->serverInfo()->supportedChannelTypes().contains(tmp[0]))
- {
- if((*it)==tmp)
- {
- *it=QString("\r!c\r%1\r").arg(*it);
- } else {
- *it=QString("\r!c%1\r%2\r").arg(tmp, *it);
- }
- }
- }
+ if((*it)==tmp)
+ *it=QString("\r!c\r%1\r").arg(*it);
+ else
+ *it=QString("\r!c%1\r%2\r").arg(tmp, *it);
}
}
szMessage=strings.join(" ");