Fossil SCM
URL schemes are case insensitive, ie HTTP, HttP, http etc. From libfossil.
Commit
629d4ece0ef7f6c52e25f64048a0055d0a1d2fbcbf9644bd243c4c0358d79df3
Parent
c4dec3a6ec5b8ed…
1 file changed
+7
-6
+7
-6
| --- src/url.c | ||
| +++ src/url.c | ||
| @@ -149,27 +149,28 @@ | ||
| 149 | 149 | } |
| 150 | 150 | }else{ |
| 151 | 151 | if( zUrl==0 ) return; |
| 152 | 152 | } |
| 153 | 153 | |
| 154 | - if( strncmp(zUrl, "http://", 7)==0 | |
| 155 | - || strncmp(zUrl, "https://", 8)==0 | |
| 156 | - || strncmp(zUrl, "ssh://", 6)==0 | |
| 154 | + /* Schemes are case-insensitive (RFC 3986 section 3.1). */ | |
| 155 | + if( fossil_strnicmp(zUrl, "http://", 7)==0 | |
| 156 | + || fossil_strnicmp(zUrl, "https://", 8)==0 | |
| 157 | + || fossil_strnicmp(zUrl, "ssh://", 6)==0 | |
| 157 | 158 | ){ |
| 158 | 159 | int iStart; |
| 159 | 160 | char *zLogin; |
| 160 | 161 | char *zExe; |
| 161 | 162 | char cQuerySep = '?'; |
| 162 | 163 | const char *zLb; /* "[" before an IPv6 address in a URL, else "" */ |
| 163 | 164 | const char *zRb; /* "]" after an IPv6 address in a URL, else "" */ |
| 164 | 165 | |
| 165 | - if( zUrl[4]=='s' ){ | |
| 166 | + if( zUrl[4]=='s' || zUrl[4]=='S' ){ | |
| 166 | 167 | pUrlData->isHttps = 1; |
| 167 | 168 | pUrlData->protocol = "https"; |
| 168 | 169 | pUrlData->dfltPort = 443; |
| 169 | 170 | iStart = 8; |
| 170 | - }else if( zUrl[0]=='s' ){ | |
| 171 | + }else if( zUrl[0]=='s' || zUrl[0]=='S' ){ | |
| 171 | 172 | pUrlData->isSsh = 1; |
| 172 | 173 | pUrlData->protocol = "ssh"; |
| 173 | 174 | pUrlData->dfltPort = 22; |
| 174 | 175 | pUrlData->fossil = fossil_strdup("fossil"); |
| 175 | 176 | iStart = 6; |
| @@ -307,11 +308,11 @@ | ||
| 307 | 308 | char *zOld = pUrlData->path; |
| 308 | 309 | pUrlData->path = fossil_strdup(zOld+1); |
| 309 | 310 | fossil_free(zOld); |
| 310 | 311 | } |
| 311 | 312 | free(zLogin); |
| 312 | - }else if( strncmp(zUrl, "file:", 5)==0 ){ | |
| 313 | + }else if( fossil_strnicmp(zUrl, "file:", 5)==0 ){ | |
| 313 | 314 | pUrlData->isFile = 1; |
| 314 | 315 | if( zUrl[5]=='/' && zUrl[6]=='/' ){ |
| 315 | 316 | i = 7; |
| 316 | 317 | }else{ |
| 317 | 318 | i = 5; |
| 318 | 319 |
| --- src/url.c | |
| +++ src/url.c | |
| @@ -149,27 +149,28 @@ | |
| 149 | } |
| 150 | }else{ |
| 151 | if( zUrl==0 ) return; |
| 152 | } |
| 153 | |
| 154 | if( strncmp(zUrl, "http://", 7)==0 |
| 155 | || strncmp(zUrl, "https://", 8)==0 |
| 156 | || strncmp(zUrl, "ssh://", 6)==0 |
| 157 | ){ |
| 158 | int iStart; |
| 159 | char *zLogin; |
| 160 | char *zExe; |
| 161 | char cQuerySep = '?'; |
| 162 | const char *zLb; /* "[" before an IPv6 address in a URL, else "" */ |
| 163 | const char *zRb; /* "]" after an IPv6 address in a URL, else "" */ |
| 164 | |
| 165 | if( zUrl[4]=='s' ){ |
| 166 | pUrlData->isHttps = 1; |
| 167 | pUrlData->protocol = "https"; |
| 168 | pUrlData->dfltPort = 443; |
| 169 | iStart = 8; |
| 170 | }else if( zUrl[0]=='s' ){ |
| 171 | pUrlData->isSsh = 1; |
| 172 | pUrlData->protocol = "ssh"; |
| 173 | pUrlData->dfltPort = 22; |
| 174 | pUrlData->fossil = fossil_strdup("fossil"); |
| 175 | iStart = 6; |
| @@ -307,11 +308,11 @@ | |
| 307 | char *zOld = pUrlData->path; |
| 308 | pUrlData->path = fossil_strdup(zOld+1); |
| 309 | fossil_free(zOld); |
| 310 | } |
| 311 | free(zLogin); |
| 312 | }else if( strncmp(zUrl, "file:", 5)==0 ){ |
| 313 | pUrlData->isFile = 1; |
| 314 | if( zUrl[5]=='/' && zUrl[6]=='/' ){ |
| 315 | i = 7; |
| 316 | }else{ |
| 317 | i = 5; |
| 318 |
| --- src/url.c | |
| +++ src/url.c | |
| @@ -149,27 +149,28 @@ | |
| 149 | } |
| 150 | }else{ |
| 151 | if( zUrl==0 ) return; |
| 152 | } |
| 153 | |
| 154 | /* Schemes are case-insensitive (RFC 3986 section 3.1). */ |
| 155 | if( fossil_strnicmp(zUrl, "http://", 7)==0 |
| 156 | || fossil_strnicmp(zUrl, "https://", 8)==0 |
| 157 | || fossil_strnicmp(zUrl, "ssh://", 6)==0 |
| 158 | ){ |
| 159 | int iStart; |
| 160 | char *zLogin; |
| 161 | char *zExe; |
| 162 | char cQuerySep = '?'; |
| 163 | const char *zLb; /* "[" before an IPv6 address in a URL, else "" */ |
| 164 | const char *zRb; /* "]" after an IPv6 address in a URL, else "" */ |
| 165 | |
| 166 | if( zUrl[4]=='s' || zUrl[4]=='S' ){ |
| 167 | pUrlData->isHttps = 1; |
| 168 | pUrlData->protocol = "https"; |
| 169 | pUrlData->dfltPort = 443; |
| 170 | iStart = 8; |
| 171 | }else if( zUrl[0]=='s' || zUrl[0]=='S' ){ |
| 172 | pUrlData->isSsh = 1; |
| 173 | pUrlData->protocol = "ssh"; |
| 174 | pUrlData->dfltPort = 22; |
| 175 | pUrlData->fossil = fossil_strdup("fossil"); |
| 176 | iStart = 6; |
| @@ -307,11 +308,11 @@ | |
| 308 | char *zOld = pUrlData->path; |
| 309 | pUrlData->path = fossil_strdup(zOld+1); |
| 310 | fossil_free(zOld); |
| 311 | } |
| 312 | free(zLogin); |
| 313 | }else if( fossil_strnicmp(zUrl, "file:", 5)==0 ){ |
| 314 | pUrlData->isFile = 1; |
| 315 | if( zUrl[5]=='/' && zUrl[6]=='/' ){ |
| 316 | i = 7; |
| 317 | }else{ |
| 318 | i = 5; |
| 319 |