ref: 36ca0d44ee02900ed52ed143c7612341e26555e6
parent: 22f34a315b71fdeb2ac90b79f134e11b3052f07a
author: Julien Blanchard <julien@typed-hole.org>
date: Thu Jan 21 04:06:32 EST 2021
Fixes: - a misordered nil check in saneurl() - an fd leak in gemini_get() - a lack of base url in gemini_get() thanks Ori!
--- a/castor.c
+++ b/castor.c
@@ -409,7 +409,6 @@
}
Bflush(&body);
- close(fd);
h->p = hist;
h->n = nil;
@@ -417,14 +416,14 @@
hist = h;
show(c);
- }
+ }
break;
case 30:
- gemini_get(urlparse(nil, r->meta));
+ gemini_get(urlparse(url, r->meta));
break;
case 31:
- gemini_get(urlparse(nil, r->meta));
+ gemini_get(urlparse(url, r->meta));
break;
case 40:
message("Temporary failure, please try again later!");
@@ -469,6 +468,7 @@
// message("Unknown status code %d!", status);
// break;
}
+ close(fd);
}
void
--- a/url.c
+++ b/url.c
@@ -223,13 +223,12 @@
static Url *
saneurl(Url *u)
{
- if(strcmp(u->scheme, "mailto") == 0 && Upath(u) != nil)
- return u;
-
if(u == nil || u->scheme == nil || u->host == nil || Upath(u) == nil){
freeurl(u);
return nil;
}
+ if(strcmp(u->scheme, "mailto") == 0 && Upath(u) != nil)
+ return u;
if(u->port){
/* remove default ports */
switch(atoi(u->port)){