[PATCH] Add cast to unsigned char to strverscmp

brian.inglis@systematicsw.ab.ca brian.inglis@systematicsw.ab.ca
Thu Nov 7 19:05:23 GMT 2024


On 2024-11-07 09:53, Jeremy Bettis wrote:
> GCC 14.2 with -Werror=sign-compare fails on this code.
> 
> Signed-off-by: Jeremy Bettis <jbettis@google.com <mailto:jbettis@google.com>>
> ---
>   newlib/libc/string/strverscmp.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/newlib/libc/string/strverscmp.c b/newlib/libc/string/strverscmp.c
> index 55966335f..e86718faa 100644
> --- a/newlib/libc/string/strverscmp.c
> +++ b/newlib/libc/string/strverscmp.c
> @@ -76,7 +76,7 @@ int strverscmp(const char *l0, const char *r0)
>    else if (c!='0') z=0;
>    }
> 
> - if (l[dp]<'1' + 9U && r[dp]<'1' + 9U) {

I'd call that a false positive?

> + if ((unsigned char)(l[dp]-'1')<9U && (unsigned char)(r[dp]-'1')<9U) {

What happens when chars are '\0' or '\x80'?

>    /* If we're looking at non-degenerate digit sequences starting
>    * with nonzero digits, longest digit string is greater. */
>    for (j=i; isdigit(l[j]); j++)

-- 
Take care. Thanks, Brian Inglis              Calgary, Alberta, Canada

La perfection est atteinte                   Perfection is achieved
non pas lorsqu'il n'y a plus rien à ajouter  not when there is no more to add
mais lorsqu'il n'y a plus rien à retirer     but when there is no more to cut
                                 -- Antoine de Saint-Exupéry


More information about the Newlib mailing list