Fossil SCM

URL schemes are case insensitive, ie HTTP, HttP, http etc. From libfossil.

danshearer 2026-10-12 06:39 UTC trunk
Commit 629d4ece0ef7f6c52e25f64048a0055d0a1d2fbcbf9644bd243c4c0358d79df3
1 file changed +7 -6
+7 -6
--- src/url.c
+++ src/url.c
@@ -149,27 +149,28 @@
149149
}
150150
}else{
151151
if( zUrl==0 ) return;
152152
}
153153
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
157158
){
158159
int iStart;
159160
char *zLogin;
160161
char *zExe;
161162
char cQuerySep = '?';
162163
const char *zLb; /* "[" before an IPv6 address in a URL, else "" */
163164
const char *zRb; /* "]" after an IPv6 address in a URL, else "" */
164165
165
- if( zUrl[4]=='s' ){
166
+ if( zUrl[4]=='s' || zUrl[4]=='S' ){
166167
pUrlData->isHttps = 1;
167168
pUrlData->protocol = "https";
168169
pUrlData->dfltPort = 443;
169170
iStart = 8;
170
- }else if( zUrl[0]=='s' ){
171
+ }else if( zUrl[0]=='s' || zUrl[0]=='S' ){
171172
pUrlData->isSsh = 1;
172173
pUrlData->protocol = "ssh";
173174
pUrlData->dfltPort = 22;
174175
pUrlData->fossil = fossil_strdup("fossil");
175176
iStart = 6;
@@ -307,11 +308,11 @@
307308
char *zOld = pUrlData->path;
308309
pUrlData->path = fossil_strdup(zOld+1);
309310
fossil_free(zOld);
310311
}
311312
free(zLogin);
312
- }else if( strncmp(zUrl, "file:", 5)==0 ){
313
+ }else if( fossil_strnicmp(zUrl, "file:", 5)==0 ){
313314
pUrlData->isFile = 1;
314315
if( zUrl[5]=='/' && zUrl[6]=='/' ){
315316
i = 7;
316317
}else{
317318
i = 5;
318319
--- 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

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button