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>
This commit is contained in:
Thiago Macieira 2012-09-20 12:54:38 +02:00 committed by The Qt Project
parent 59ad0019dc
commit fe1541b268
2 changed files with 5 additions and 8 deletions

View File

@ -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)"))

View File

@ -79,7 +79,6 @@ public:
enum ErrorCode {
// the high byte of the error code matches the Section
InvalidSchemeError = Scheme << 8,
SchemeEmptyError,
InvalidUserNameError = UserName << 8,