Re: [PATCH] Fix make-custom-port in case encoding is #f

Maxime Devos <[email protected]> Sun, 2 Feb 2025 21:01:22 +0100
Newsgroups gmane.lisp.guile.devel
Message-ID <[email protected]>
On 2/02/2025 20:51, H. Müller wrote:
> -          (encoding (string->symbol (fluid-ref %default-port-encoding)))
> +          (encoding (if (string? (fluid-ref %default-port-encoding))
> +                        (string->symbol (fluid-ref %default-port-encoding))
> +                        (fluid-ref %default-port-encoding)))

Probably 'and=>' would be clearer - as-is, it looks like it expects a 
symbol but also accepts a string (to be converted into a symbol). But 
that's not the case - it accepts strings, but also the boolean #false.  
'and=>' is specifically about apply a function to non-false things and 
leaving false in-place, so 'and=>' would avoid the potential misconception.

There is TOCTTOU bug here -  an async could mutate the current value of 
the %default-port-encoding fluid in-between the first fluid-ref 
invocation and the second fluid-ref invocation. and=> would avoid that.

Best regards,
Maxime Devos