Hi,
I added an exception for your email to the list. Following replies
should get archived.
On Fri, Oct 31, 2025 at 11:34:04AM -0400, John McCue wrote:
Hi Rodrigo,
Attached are these 3 patches, the third one is
a very minor one for the gemini plugin's Makefile.
Thanks for the patches.
1. io.txt -- A patch to io.c to avoid a compile error
on OpenBSD. This is based upon the email I responded to
earlier today.
2. dpi.txt -- Corrects an odd issue on OpenBSD with the
gopher plugin. Access a gopher hole works fine on first
try, accessing a 2nd hole does nothing, no data is
presented. Selecting the "Stop" button in dillo works to
stop the attempted load. My wild guess is one of the
casts fixed the issue.
I cannot reproduce this, with or without the patch. Tested in order:
- gopher://gopher.quux.org:70/1/
- gopher://gopher.floodgap.com/
If you can reliably reproduce this, you could dump the backtrace while
is "doing nothing" in case it got stuck in some network operation.
3. gemini_mk.txt -- a simple change to the gemini plugin's
Makefile. It allows the gemini plugin to 'compile' on
NetBSD. NetBSD installs packages in /usr/pkg.
As mentioned in the last email, I will be happy to test
on OpenBSD and NetBSD.
Thanks
John
diff --git a/dpi.c b/dpi.c
index 7b38800..52547f8 100644
--- a/dpi.c
+++ b/dpi.c
@@ -7,7 +7,7 @@
#include "io.h"
static void check_auth() {
- char buf[30];
+ char buf[31];
int rc;
char key[4], local_key[4];
char keys[128];
@@ -16,16 +16,16 @@ static void check_auth() {
rc = read_all(STDIN_FILENO, buf, 29);
if (rc < 0) err(1, "read auth");
buf[30] = '\0';
- rc = sscanf(buf, "<cmd='auth' msg='%4x' '>", key);
+ rc = sscanf(buf, "<cmd='auth' msg='%4x' '>", (unsigned int *) key);
The address of key may not be aligned to the size of a word. Some
architectures will cause an invalid access trying to write an int to a
non-aligned address.
A better solution is to declare key as an unsigned int. I applied your
fixes and then changed the key variables.
if (rc < 0) err(1, "auth: %.*s", 29, buf);
if (rc < 1) errx(1, "auth: %.*s", 29, buf);
home = getenv("HOME");
if (!home) home = ".";
sz = read_file(keys, sizeof(keys), "%s/.dillo/dpid_comm_keys", home);
if (sz < 0) err(1, "read dillo comm keys");
- rc = sscanf(keys, "%*d %4x' '>", local_key);
- if (rc < 0) err(1, "comm key: %.*s", sz, keys);
- if (rc < 1) errx(1, "comm key: %.*s", sz, keys);
+ rc = sscanf(keys, "%*d %4x' '>", (unsigned int *) local_key);
+ if (rc < 0) err(1, "comm key: %.*s", (int) sz, keys);
+ if (rc < 1) errx(1, "comm key: %.*s", (int) sz, keys);
if (memcmp(key, local_key, 4)) errx(1, "wrong dillo key");
}
@@ -38,7 +38,7 @@ static void get_url(char *url_buf, size_t url_len) {
rc = read_all(STDIN_FILENO, buf, sizeof(buf));
if (rc < 0) err(1, "read open_url");
if (strncmp(buf, "<cmd='open_url' url='", 21)) {
- err(1, "bad open_url cmd: %.*s", sizeof(buf), buf);
+ err(1, "bad open_url cmd: %.*s", (int) sizeof(buf), buf);
}
len = url_len;
rc = read_some(STDIN_FILENO, url_buf, &len);
@@ -48,7 +48,7 @@ static void get_url(char *url_buf, size_t url_len) {
if (url_buf[i] == '\'' && url_buf[i+1] == ' ') break;
}
if (i > len-3 || strncmp(url_buf + i, "' '>", 4)) {
- err(1, "bad url end: %.*s", len, url_buf);
+ err(1, "bad url end: %.*s", (int) len, url_buf);
}
url_buf[i] = '\0';
}
diff --git a/Makefile b/Makefile
index 1ff7047..e41e173 100644
--- a/Makefile
+++ b/Makefile
@@ -13,6 +13,7 @@ $(DPIDRC):
mkdir -p $(DPI_DIR)
if [ -f /etc/dillo/dpidrc ]; then cp /etc/dillo/dpidrc $@; \
elif [ -f /usr/local/etc/dillo/dpidrc ]; then cp
/usr/local/etc/dillo/dpidrc $@; \
+ elif [ -f /usr/pkg/etc/dillo/dpidrc ]; then cp
/usr/pkg/etc/dillo/dpidrc $@; \
else echo "Can't find dpidrc, is dillo installed?"; false; fi
This is not in our upstream, but I would rather avoid having each
possible path here. I added a DILLO_PREFIX variable, empty by default.
So you can use `make install DILLO_PREFIX=/usr/pkg` to find dpidrc in
your system. By default it only looks at /etc/dillo/dpidrc.
install-proto: $(DPIDRC)
diff --git a/io.c b/io.c
index 615f346..f437c2e 100644
--- a/io.c
+++ b/io.c
@@ -7,6 +7,7 @@
#include <fcntl.h>
#include <netdb.h>
#include <netinet/in.h>
+#include <sys/socket.h>
Applied.
#include "io.h"
I fixed several other problems and set the C standard to C99 and enabled
POSIX 2001 by default in CFLAGS. I also performed the build with gcc and
clang on Linux with -Werror -Wall -Wextra -pedantic as well as with
-fsanitize=address to see if I catch something while running the plugin.
Nothing so far.
I pushed it here (we are moving away from GitHub):
https://git.dillo-browser.org/plugins/gopher/log/?h=fix-bsd
Let me know if you encounter problems building it on any BSD.
Thanks!,
Rodrigo.
_______________________________________________
Dillo-dev mailing list -- [email protected]
To unsubscribe send an email to [email protected]