On Mon, Nov 03, 2025 at 04:13:34PM +0100, [email protected] wrote:
> commit 61b58e3c2731966a8fa4d60e33a724a27e722f76
> Author:     Carlos J. Torres <[email protected]>
> AuthorDate: Mon Nov 3 10:10:31 2025 -0500
> Commit:     Roberto E. Vargas Caballero <[email protected]>
> CommitDate: Mon Nov 3 16:13:05 2025 +0100
> 
>     basename: Ignore suffix when its an empty string
>     
>     basename(3) manual states if path is a null pointer or emtpy
>     string, a pointer to "." is returned. We shouldn't attempt
>     to modify it because its const.
> 
> diff --git a/basename.c b/basename.c
> index 94a2848..63e7b7b 100644
> --- a/basename.c
> +++ b/basename.c
> @@ -15,6 +15,7 @@ int
>  main(int argc, char *argv[])
>  {
>       ssize_t off;
> +     size_t slen;
>       char *p;
>  
>       ARGBEGIN {
> @@ -26,8 +27,8 @@ main(int argc, char *argv[])
>               usage();
>  
>       p = basename(argv[0]);
> -     if (argc == 2) {
> -             off = strlen(p) - strlen(argv[1]);
> +     if (argc == 2 && (slen = strlen(argv[1])) > 0) {
> +             off = strlen(p) - slen;
>               if (off > 0 && !strcmp(p + off, argv[1]))
>                       p[off] = '\0';
>       }
> 

I think theres one case that difers:

        basename "" ""

should return "". Now it returns ".".

Briefly tested patch:



diff --git a/basename.c b/basename.c
index 63e7b7b..aa66f4a 100644
--- a/basename.c
+++ b/basename.c
@@ -16,7 +16,7 @@ main(int argc, char *argv[])
 {
        ssize_t off;
        size_t slen;
-       char *p;
+       char *p = "";
 
        ARGBEGIN {
        default:
@@ -26,7 +26,8 @@ main(int argc, char *argv[])
        if (argc != 1 && argc != 2)
                usage();
 
-       p = basename(argv[0]);
+       if (argv[0][0])
+               p = basename(argv[0]);
        if (argc == 2 && (slen = strlen(argv[1])) > 0) {
                off = strlen(p) - slen;
                if (off > 0 && !strcmp(p + off, argv[1]))

-- 
Kind regards,
Hiltjo

Reply via email to