On Sat, Nov 01, 2025 at 12:34:17AM +0100, Rodrigo Arias wrote:
Hi,
I added an exception for your email to the list. Following replies should get archived.
Thanks
On Fri, Oct 31, 2025 at 11:34:04AM -0400, John McCue wrote:
[...]
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.
I'll try and backtrace, I never did that before, I usually throw printfs all over the place. But ... the version from git clone https://git.dillo-browser.org/plugins/gopher is working after I added this <sys/socket.h> to io.c to compile it. I also checked the original version, that works now, very odd. I will play around with this to see if I could figure out what I may have done differently. [...]
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.
This sounds fine by me, I just made changes to "get it working" :) [...]
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.
Fine by me.
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.
After I added this <sys/socket.h> to io.c I can compile it on OpenBSD. I attached the warnings to this email as warn_openbsd.txt in case you want it. I think many of the warnings can be ignored. NetBSD has no warnings and it too works fine.
Thanks!, Rodrigo.
John