Re: mutt_buffer_concat_path is broken [PATCH: 1/1]

Alejandro Colomar via Mutt-dev <[email protected]> Thu, 7 May 2026 18:27:19 +0200
Newsgroups gmane.mail.mutt.devel
Message-ID <afy9B0YaQTGpM7P3@devuan>
Hi Derek,

On 2026-05-07T12:19:57-0400, Derek Martin wrote:
> On Wed, May 06, 2026 at 11:15:19PM +0200, Alejandro Colomar via Mutt-dev wrote:
> > To be honest, I find the code below completely unreadable.
> 
> That's a fair criticism, I didn't spend enough (any, really) time
> trying to simplify the logic.  Simplification was definitely possible.
> The second version is much clearer, I think.
> 
> FWIW, I found yours no more readable, mostly because the logic was
> spread across too many layers.

The actual fix is not spread:

	diff --git i/muttlib.c w/muttlib.c
	index 59a48378..a9fe8779 100644
	--- i/muttlib.c
	+++ w/muttlib.c
	@@ -1394,6 +1394,8 @@ void mutt_buffer_concat_path(BUFFER *d, const char *dir, const char *fname)
	   if (!*fname || (*dir && dir[strlen(dir)-1] == '/'))
	     fmt = "%s%s";
	 
	+  fname += strspn(fname, "/");
	+
	   mutt_buffer_printf(d, fmt, dir, fname);
	 }

This passes all the tests you've shown (except for the NULL pointer
segfault), and uses a well-known C89 function.


Cheers,
Alex

-- 
<https://www.alejandro-colomar.es>
signature.asc (application/pgp-signature, 833 B)
-----BEGIN PGP SIGNATURE-----

iQIzBAABCgAdFiEES7Jt9u9GbmlWADAi64mZXMKQwqkFAmn8vWcACgkQ64mZXMKQ
wqlyCg/9EzzZ6oGSbczzEo42Gzn3ev+n+juxkmVmlWtA23/tzv6kmF+DLgfOQ8eK
F77x2qzzVUyLboAmoQrJigJtz0YCa9HSkqa5zOXbKUGJlZDqwFYEFb+E3A1V7lqa
+REsQgvwCfpDOxLXAV4VYLNWqBrTTxatetNXw7eSZNkn7sDYgmt1YNT+lrq+LWK0
Mo9hK0WdLWfpjsacN/jiEOG8JQKWaqKEsW7Yt+DQ8/Fm3zB4SBvufZVamPI88sZI
mM3VShOdN/shxvWyeqqsgcEVZ9kG88RjVvYLCUn1Zzw8mH1MClDAeTSArSTPD8hW
0qIrq4qtepKegz4rLqvBd12DQcjsmFDd4gpx+1fzQo799shBjd29F9qdqVQ6UiqB
5ZMkF2T3f7mybMvbxm45mISOfz8hKoeyTbVpHr2sOKI4iUfc15mzR+H41+jSE7g0
Hmg47L3iY05ymn56R1acsCKywxOO9QHBQPVWpBZ+K+Vd3ijel6SeSC9/0U1y1E3k
LPETxf84xgsMSeOrw8Gf6F227E/YNkhT2zgNuLQGw2MLT0OxR4nt1n3GqrPf6Esd
xMD9lRworUf5yj8eK66Vu859QXEK3luc2jQ/BenAJVjOyCCOuhtUKSLZwmp6Cr10
at517OJ0nb4LkZc3lB8SPAZR51ASHJuFO6TBMciwlD8kH1H8/oI=
=mzgI
-----END PGP SIGNATURE-----