aboutsummaryrefslogtreecommitdiff
path: root/lib/util.cpp
diff options
context:
space:
mode:
authorKitsune Ral <Kitsune-Ral@users.sf.net>2020-09-11 06:50:45 +0200
committerKitsune Ral <Kitsune-Ral@users.sf.net>2020-11-06 14:07:20 +0100
commite00b3674f9fd8b606ea4d293dfb078ed4a621e12 (patch)
tree132feee13cfc34ac38cef895258a4aa1540bda5a /lib/util.cpp
parent12f1eea08f84e1ca9229272d3fae88dc8d787c72 (diff)
downloadlibquotient-e00b3674f9fd8b606ea4d293dfb078ed4a621e12.tar.gz
libquotient-e00b3674f9fd8b606ea4d293dfb078ed4a621e12.zip
More stringent serverpart checks in user ids
May lead to new crashes due to nullptr returned from Connection::user() on more utterly invalid content from the wire that the library still doesn't properly invalidate. This has long been quite a good case for exceptions, or another error-handling framework: Connection::user() can return nullptr either when out of memory or when the id is invalid or empty, and other places are likely to treat invalid ids in different ways but probably just hope that memory exhaustion "never happens", or try to handle it in a quite different way than an empty or invalid id. Something to think of in 0.7. (cherry picked from commit 3c85f049389dec3b0ee6406f0be2cfaf0089f1fe)
Diffstat (limited to 'lib/util.cpp')
-rw-r--r--lib/util.cpp4
1 files changed, 2 insertions, 2 deletions
diff --git a/lib/util.cpp b/lib/util.cpp
index 797f6d69..023645c1 100644
--- a/lib/util.cpp
+++ b/lib/util.cpp
@@ -116,13 +116,13 @@ qreal Quotient::stringToHueF(const QString& s)
}
static const auto ServerPartRegEx = QStringLiteral(
- "(\\[[^]]+\\]|[^:@]+)" // Either IPv6 address or hostname/IPv4 address
+ "(\\[[^][:blank:]]+\\]|[-[:alnum:].]+)" // Either IPv6 address or hostname/IPv4 address
"(?::(\\d{1,5}))?" // Optional port
);
QString Quotient::serverPart(const QString& mxId)
{
- static QString re = "^[@!#$+].+?:(" // Localpart and colon
+ static QString re = "^[@!#$+].*?:(" // Localpart and colon
% ServerPartRegEx % ")$";
static QRegularExpression parser(
re,