src/corelib/io/qurl.cpp
changeset 19 fcece45ef507
parent 18 2f34d5167611
child 25 e24348a560a6
equal deleted inserted replaced
18:2f34d5167611 19:fcece45ef507
   435     } 
   435     } 
   436     return false;
   436     return false;
   437 }
   437 }
   438 
   438 
   439 // scheme      = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
   439 // scheme      = ALPHA *( ALPHA / DIGIT / "+" / "-" / "." )
   440 static void QT_FASTCALL _scheme(const char **ptr, QUrlParseData *parseData)
   440 static bool QT_FASTCALL _scheme(const char **ptr, QUrlParseData *parseData)
   441 {
   441 {
   442     bool first = true;
   442     bool first = true;
       
   443     bool isSchemeValid = true;
   443 
   444 
   444     parseData->scheme = *ptr;
   445     parseData->scheme = *ptr;
   445     for (;;) {
   446     for (;;) {
   446         char ch = **ptr;
   447         char ch = **ptr;
   447         if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {
   448         if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {
   448             ;
   449             ;
   449         } else if (!first && ((ch >= '0' && ch <= '9') || ch == '+' || ch == '-' || ch == '.')) {
   450         } else if ((ch >= '0' && ch <= '9') || ch == '+' || ch == '-' || ch == '.') {
   450             ;
   451             if (first)
       
   452                 isSchemeValid = false;
   451         } else {
   453         } else {
   452             break;
   454             break;
   453         }
   455         }
   454 
   456 
   455         ++(*ptr);
   457         ++(*ptr);
   456         first = false;
   458         first = false;
   457     }
   459     }
   458 
   460 
   459     if (**ptr != ':') {
   461     if (**ptr != ':') {
       
   462         isSchemeValid = true;
   460         *ptr = parseData->scheme;
   463         *ptr = parseData->scheme;
   461     } else {
   464     } else {
   462         parseData->schemeLength = *ptr - parseData->scheme;
   465         parseData->schemeLength = *ptr - parseData->scheme;
   463         ++(*ptr); // skip ':'
   466         ++(*ptr); // skip ':'
   464     }
   467     }
       
   468 
       
   469     return isSchemeValid;
   465 }
   470 }
   466 
   471 
   467 // IPvFuture  = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )
   472 // IPvFuture  = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )
   468 static bool QT_FASTCALL _IPvFuture(const char **ptr)
   473 static bool QT_FASTCALL _IPvFuture(const char **ptr)
   469 {
   474 {
  3741 #if defined (QURL_DEBUG)
  3746 #if defined (QURL_DEBUG)
  3742     qDebug("QUrlPrivate::parse(), parsing \"%s\"", pptr);
  3747     qDebug("QUrlPrivate::parse(), parsing \"%s\"", pptr);
  3743 #endif
  3748 #endif
  3744 
  3749 
  3745     // optional scheme
  3750     // optional scheme
  3746     _scheme(ptr, &parseData);
  3751     bool isSchemeValid = _scheme(ptr, &parseData);
       
  3752 
       
  3753     if (isSchemeValid == false) {
       
  3754         that->isValid = false;
       
  3755         char ch = *((*ptr)++);
       
  3756         that->errorInfo.setParams(*ptr, QT_TRANSLATE_NOOP(QUrl, "unexpected URL scheme"),
       
  3757                                   0, ch);
       
  3758         QURL_SETFLAG(that->stateFlags, Validated | Parsed);
       
  3759 #if defined (QURL_DEBUG)
       
  3760         qDebug("QUrlPrivate::parse(), unrecognized: %c%s", ch, *ptr);
       
  3761 #endif
       
  3762         return;
       
  3763     }
  3747 
  3764 
  3748     // hierpart
  3765     // hierpart
  3749     _hierPart(ptr, &parseData);
  3766     _hierPart(ptr, &parseData);
  3750 
  3767 
  3751     // optional query
  3768     // optional query