summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2012-09-20 12:54:38 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-10-02 22:34:42 +0200
commitfe1541b26883b7ca594012da4621ad8b8b22ec2c (patch)
tree3286df117b58fbb941657e66b1cd62f8beed417f /src
parent59ad0019dcbb59b25a0d252575fe831b189d16f6 (diff)
Update QUrlPrivate::setScheme: EmptySchemeError never happens
As the comment says, an empty scheme is not permitted. However, if that error were to happen, QUrl falls back to parsing the URI as an "URI reference", starting with the path. E.g., ":/foo" is a path of ":/foo", which will in turn trigger the compound "colon before slash" error. Also, we don't percent-decode in the scheme. Change-Id: I438a61e17323c7722ddcc64792577a9ecb869c4b Reviewed-by: Shane Kearns <shane.kearns@accenture.com> Reviewed-by: David Faure <faure@kde.org>
Diffstat (limited to 'src')
-rw-r--r--src/corelib/io/qurl.cpp12
-rw-r--r--src/corelib/io/qurl_p.h1
2 files changed, 5 insertions, 8 deletions
diff --git a/src/corelib/io/qurl.cpp b/src/corelib/io/qurl.cpp
index 0f8ed9fb17..3c82a2659f 100644
--- a/src/corelib/io/qurl.cpp
+++ b/src/corelib/io/qurl.cpp
@@ -661,17 +661,17 @@ bool QUrlPrivate::setScheme(const QString &value, int len)
{
// schemes are strictly RFC-compliant:
// scheme = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
- // but we need to decode any percent-encoding sequences that fall on
- // those characters
// we also lowercase the scheme
+ // schemes in URLs are not allowed to be empty, but they can be in
+ // "Relative URIs" which QUrl also supports. QUrl::setScheme does
+ // not call us with len == 0, so this can only be from parse()
scheme.clear();
- sectionIsPresent |= Scheme;
- sectionHasError |= Scheme; // assume it has errors, we'll clear before returning true
- errorCode = SchemeEmptyError;
if (len == 0)
return false;
+ sectionIsPresent |= Scheme;
+
// validate it:
errorCode = InvalidSchemeError;
int needsLowercasing = -1;
@@ -3413,8 +3413,6 @@ static QString errorMessage(QUrlPrivate::ErrorCode errorCode, QChar c)
QString msg = QStringLiteral("Invalid scheme (character '%1' not permitted)");
return msg.arg(c);
}
- case QUrlPrivate::SchemeEmptyError:
- return QStringLiteral("Empty scheme");
case QUrlPrivate::InvalidUserNameError:
return QString(QStringLiteral("Invalid user name (character '%1' not permitted)"))
diff --git a/src/corelib/io/qurl_p.h b/src/corelib/io/qurl_p.h
index 8c1e307521..12ab0c763d 100644
--- a/src/corelib/io/qurl_p.h
+++ b/src/corelib/io/qurl_p.h
@@ -79,7 +79,6 @@ public:
enum ErrorCode {
// the high byte of the error code matches the Section
InvalidSchemeError = Scheme << 8,
- SchemeEmptyError,
InvalidUserNameError = UserName << 8,