On Wed, Nov 02, 2022 at 11:45:43AM +0100, Theo Buehler wrote:
> Not all callers of valid_uri() ensure that the uri passed in is actually
> a C string and the API implies at least that uri[usz - 1] != '\0' is
> allowed. For example, x509_location() a priori doesn't pass a C string
> and Job will soon add a second instance. I think we should explicitly
> length check uri to be long enough before calling strncasecmp() on it.
> 
> The diff below is mostly cosmetic as it happens to be the case that
> libcrypto NUL-terminates ASN.1 strings for historical reasons, but this
> is an implementation detail and design mistake (general ASN.1 strings
> can have embedded NULs) that we shouldn't rely on.
> 
> The diff does change behavior in that a naked "https://"; will no longer
> be considered a valid uri (which I'm pretty sure it isn't, but I may
> have missed a corner case in the spec).
> 
> Index: validate.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/rpki-client/validate.c,v
> retrieving revision 1.45
> diff -u -p -r1.45 validate.c
> --- validate.c        3 Sep 2022 14:41:47 -0000       1.45
> +++ validate.c        2 Nov 2022 10:20:40 -0000
> @@ -290,6 +290,8 @@ valid_uri(const char *uri, size_t usz, c
>  
>       if (proto != NULL) {
>               s = strlen(proto);
> +             if (s >= usz)
> +                     return 0;
>               if (strncasecmp(uri, proto, s) != 0)
>                       return 0;
>       }
> 

Makes sense. OK claudio@
Also "https://"; should be considered invalid since there is no host
specified.

-- 
:wq Claudio

Reply via email to