Fossil SCM

Yet another fix to the URL parser.

drh 2010-09-03 01:57 trunk
Commit 7aae4ef0689fb23c66fadacd4acd5fb20a10d2a0
1 file changed +7 -5
+7 -5
--- src/url.c
+++ src/url.c
@@ -82,28 +82,30 @@
8282
g.urlIsHttps = 0;
8383
g.urlProtocol = "http";
8484
g.urlDfltPort = 80;
8585
iStart = 7;
8686
}
87
- for(i=iStart; (c=zUrl[i])!=0 && c!='/' && c!='@' && c!=':'; i++){}
87
+ for(i=iStart; (c=zUrl[i])!=0 && c!='/' && c!='@'; i++){}
8888
if( c=='@' ){
89
+ /* Parse up the user-id and password */
8990
for(j=iStart; j<i && zUrl[j]!=':'; j++){}
9091
g.urlUser = mprintf("%.*s", j-iStart, &zUrl[iStart]);
9192
dehttpize(g.urlUser);
9293
if( j<i ){
9394
g.urlPasswd = mprintf("%.*s", i-j-1, &zUrl[j+1]);
9495
dehttpize(g.urlPasswd);
9596
}
96
- for(j=i+1; (c=zUrl[j])!=0 && c!='/' && c!=':'; j++){}
97
- g.urlName = mprintf("%.*s", j-i-1, &zUrl[i+1]);
98
- i = j;
9997
if( g.urlIsSsh && g.urlPasswd ){
10098
zLogin = mprintf("%t:*@", g.urlUser);
10199
}else{
102100
zLogin = mprintf("%t@", g.urlUser);
103101
}
102
+ for(j=i+1; (c=zUrl[j])!=0 && c!='/' && c!=':'; j++){}
103
+ g.urlName = mprintf("%.*s", j-i-1, &zUrl[i+1]);
104
+ i = j;
104105
}else{
106
+ for(i=iStart; (c=zUrl[i])!=0 && c!='/' && c!=':'; i++){}
105107
g.urlName = mprintf("%.*s", i-iStart, &zUrl[iStart]);
106108
zLogin = mprintf("");
107109
}
108110
url_tolower(g.urlName);
109111
if( c==':' ){
@@ -118,11 +120,10 @@
118120
g.urlPort = g.urlDfltPort;
119121
g.urlHostname = g.urlName;
120122
}
121123
dehttpize(g.urlName);
122124
g.urlPath = mprintf(&zUrl[i]);
123
- if( g.urlIsSsh && g.urlPath[1] ) g.urlPath++;
124125
for(i=0; g.urlPath[i] && g.urlPath[i]!='?'; i++){}
125126
if( g.urlPath[i] ){
126127
g.urlPath[i] = 0;
127128
i++;
128129
}
@@ -159,10 +160,11 @@
159160
g.urlCanonical = mprintf(
160161
"%s://%s%T:%d%T%s",
161162
g.urlProtocol, zLogin, g.urlName, g.urlPort, g.urlPath, zExe
162163
);
163164
}
165
+ if( g.urlIsSsh && g.urlPath[1] ) g.urlPath++;
164166
free(zLogin);
165167
}else if( strncmp(zUrl, "file:", 5)==0 ){
166168
g.urlIsFile = 1;
167169
if( zUrl[5]=='/' && zUrl[6]=='/' ){
168170
i = 7;
169171
--- src/url.c
+++ src/url.c
@@ -82,28 +82,30 @@
82 g.urlIsHttps = 0;
83 g.urlProtocol = "http";
84 g.urlDfltPort = 80;
85 iStart = 7;
86 }
87 for(i=iStart; (c=zUrl[i])!=0 && c!='/' && c!='@' && c!=':'; i++){}
88 if( c=='@' ){
 
89 for(j=iStart; j<i && zUrl[j]!=':'; j++){}
90 g.urlUser = mprintf("%.*s", j-iStart, &zUrl[iStart]);
91 dehttpize(g.urlUser);
92 if( j<i ){
93 g.urlPasswd = mprintf("%.*s", i-j-1, &zUrl[j+1]);
94 dehttpize(g.urlPasswd);
95 }
96 for(j=i+1; (c=zUrl[j])!=0 && c!='/' && c!=':'; j++){}
97 g.urlName = mprintf("%.*s", j-i-1, &zUrl[i+1]);
98 i = j;
99 if( g.urlIsSsh && g.urlPasswd ){
100 zLogin = mprintf("%t:*@", g.urlUser);
101 }else{
102 zLogin = mprintf("%t@", g.urlUser);
103 }
 
 
 
104 }else{
 
105 g.urlName = mprintf("%.*s", i-iStart, &zUrl[iStart]);
106 zLogin = mprintf("");
107 }
108 url_tolower(g.urlName);
109 if( c==':' ){
@@ -118,11 +120,10 @@
118 g.urlPort = g.urlDfltPort;
119 g.urlHostname = g.urlName;
120 }
121 dehttpize(g.urlName);
122 g.urlPath = mprintf(&zUrl[i]);
123 if( g.urlIsSsh && g.urlPath[1] ) g.urlPath++;
124 for(i=0; g.urlPath[i] && g.urlPath[i]!='?'; i++){}
125 if( g.urlPath[i] ){
126 g.urlPath[i] = 0;
127 i++;
128 }
@@ -159,10 +160,11 @@
159 g.urlCanonical = mprintf(
160 "%s://%s%T:%d%T%s",
161 g.urlProtocol, zLogin, g.urlName, g.urlPort, g.urlPath, zExe
162 );
163 }
 
164 free(zLogin);
165 }else if( strncmp(zUrl, "file:", 5)==0 ){
166 g.urlIsFile = 1;
167 if( zUrl[5]=='/' && zUrl[6]=='/' ){
168 i = 7;
169
--- src/url.c
+++ src/url.c
@@ -82,28 +82,30 @@
82 g.urlIsHttps = 0;
83 g.urlProtocol = "http";
84 g.urlDfltPort = 80;
85 iStart = 7;
86 }
87 for(i=iStart; (c=zUrl[i])!=0 && c!='/' && c!='@'; i++){}
88 if( c=='@' ){
89 /* Parse up the user-id and password */
90 for(j=iStart; j<i && zUrl[j]!=':'; j++){}
91 g.urlUser = mprintf("%.*s", j-iStart, &zUrl[iStart]);
92 dehttpize(g.urlUser);
93 if( j<i ){
94 g.urlPasswd = mprintf("%.*s", i-j-1, &zUrl[j+1]);
95 dehttpize(g.urlPasswd);
96 }
 
 
 
97 if( g.urlIsSsh && g.urlPasswd ){
98 zLogin = mprintf("%t:*@", g.urlUser);
99 }else{
100 zLogin = mprintf("%t@", g.urlUser);
101 }
102 for(j=i+1; (c=zUrl[j])!=0 && c!='/' && c!=':'; j++){}
103 g.urlName = mprintf("%.*s", j-i-1, &zUrl[i+1]);
104 i = j;
105 }else{
106 for(i=iStart; (c=zUrl[i])!=0 && c!='/' && c!=':'; i++){}
107 g.urlName = mprintf("%.*s", i-iStart, &zUrl[iStart]);
108 zLogin = mprintf("");
109 }
110 url_tolower(g.urlName);
111 if( c==':' ){
@@ -118,11 +120,10 @@
120 g.urlPort = g.urlDfltPort;
121 g.urlHostname = g.urlName;
122 }
123 dehttpize(g.urlName);
124 g.urlPath = mprintf(&zUrl[i]);
 
125 for(i=0; g.urlPath[i] && g.urlPath[i]!='?'; i++){}
126 if( g.urlPath[i] ){
127 g.urlPath[i] = 0;
128 i++;
129 }
@@ -159,10 +160,11 @@
160 g.urlCanonical = mprintf(
161 "%s://%s%T:%d%T%s",
162 g.urlProtocol, zLogin, g.urlName, g.urlPort, g.urlPath, zExe
163 );
164 }
165 if( g.urlIsSsh && g.urlPath[1] ) g.urlPath++;
166 free(zLogin);
167 }else if( strncmp(zUrl, "file:", 5)==0 ){
168 g.urlIsFile = 1;
169 if( zUrl[5]=='/' && zUrl[6]=='/' ){
170 i = 7;
171

Keyboard Shortcuts

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