#####################################################################
# Some fixes for having line feeds in text without a carriage return.
# Make sure that only lines with tabs are treated as links.
# Support links that don't begin with a '/'.
# dave@slackbuilds.org
#####################################################################
diff -Naur a/src/protocol/gopher/gopher.c b/src/protocol/gopher/gopher.c
--- a/src/protocol/gopher/gopher.c 2020-01-08 05:43:40.148408539 +0000
+++ b/src/protocol/gopher/gopher.c 2020-01-08 05:43:26.357005028 +0000
@@ -322,7 +322,7 @@
/* Get entity type, and selector string. */
/* Pick up gopher_entity */
- if (selectorlen > 1 && selector[1] == '/') {
+ if (selectorlen > 1) {
entity = *selector++;
selectorlen--;
}
@@ -472,6 +472,7 @@
unsigned char *host = NULL;
unsigned char *port = NULL;
enum gopher_entity entity = *name++;
+ int link = 0;
if (!entity) {
add_char_to_string(buffer, '\n');
@@ -481,6 +482,7 @@
if (*name) {
selector = strchr(name, ASCII_TAB);
if (selector) {
+ link = 1;
/* Terminate name */
*selector++ = '\0';
@@ -551,7 +553,7 @@
switch (entity) {
case GOPHER_WWW:
/* Gopher pointer to W3 */
- if (selector) {
+ if (selector && link == 1) {
add_gopher_link(buffer, name, selector);
break;
}
@@ -603,7 +605,8 @@
} else if (address.length > 0
&& strlcmp(address.source, address.length - 1,
- "gopher://error.host:1/", -1)) {
+ "gopher://error.host:1/", -1)
+ && link == 1) {
add_gopher_link(buffer, name, address.source);
} else {
@@ -623,7 +626,7 @@
get_gopher_line_end(unsigned char *data, int datalen)
{
for (; datalen > 1; data++, datalen--)
- if (data[0] == ASCII_CR && data[1] == ASCII_LF)
+ if (data[0] == ASCII_CR || data[0] == ASCII_LF)
return data + 2;
return NULL;
|