ref: 48a172147b7b55108dc0f40995ef5000a52d50a5
parent: 27cba0188575b3663d7e4873c99adfa489213d5a
author: Julien Blanchard <julien@typed-hole.org>
date: Thu Dec 10 12:45:06 EST 2020
Make TLS ans parsing more robust
--- a/castor.c
+++ b/castor.c
@@ -325,10 +325,15 @@
return -1;
}
- conn.serverName = url->host;
memset(&conn, 0, sizeof(conn));
+ conn.serverName = url->host;
fd = tlsClient(fd, &conn);
+ if(fd < 0){
+ message("tls: %r");
+ return -1;
+ }
+
th = initThumbprints("/sys/lib/ssl/gemini", nil, "x509");
if(th != nil){
@@ -590,11 +595,15 @@
if(link==nil)
return;
- if(strbeg(link, "gemini://") == 0 || strstr(link, "://") != nil){
+ if(strbeg(link, "gemini://") == 0){
next_url = urlparse(nil, link);
+ }else if(strbeg(link, "//") == 0){
+ next_url = urlparse(nil, smprint("gemini:%s", link));
}else{
/* assuming relative URL */
- if(*link == '/'){
+ if(strcmp(link, "/") == 0){
+ n = smprint("gemini://%s", current_base_url->host);
+ }else if(*link == '/'){
n = smprint("%s%s", urlparse(current_base_url, link)->raw, estrdup(link)+1);
}else{
n = smprint("%s%s", urlparse(current_base_url, link)->raw, estrdup(link));
@@ -601,8 +610,8 @@
}
next_url = urlparse(nil, n);
}
-
- if(strcmp(next_url->scheme, "gemini") == 0){
+
+ if(strbeg(next_url->raw, "gemini://") == 0){
gemini_get(next_url);
}else{
plumburl(next_url);
@@ -690,7 +699,7 @@
Url *url;
if(argc == 2)
- if(strcmp(argv[1], "gemini://") != 0){
+ if(strbeg(argv[1], "gemini://") != 0){
url = urlparse(nil, smprint("gemini://%s", argv[1]));
}else{
url = urlparse(nil, argv[1]);