Re: [hackers] [sbase] basename: Ignore suffix when its an empty string || Carlos J. Torres

From: Hiltjo Posthuma <hiltjo_AT_codemadness.org>
Date: Mon, 3 Nov 2025 19:37:00 +0100

On Mon, Nov 03, 2025 at 04:13:34PM +0100, git_AT_suckless.org wrote:
> commit 61b58e3c2731966a8fa4d60e33a724a27e722f76
> Author: Carlos J. Torres <vlaadbrain_AT_gmail.com>
> AuthorDate: Mon Nov 3 10:10:31 2025 -0500
> Commit: Roberto E. Vargas Caballero <k0ga_AT_shike2.net>
> 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
> _AT_@ -15,6 +15,7 @@ int
> main(int argc, char *argv[])
> {
> ssize_t off;
> + size_t slen;
> char *p;
>
> ARGBEGIN {
> _AT_@ -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
_AT_@ -16,7 +16,7 @@ main(int argc, char *argv[])
 {
         ssize_t off;
         size_t slen;
- char *p;
+ char *p = "";
 
         ARGBEGIN {
         default:
_AT_@ -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
Received on Mon Nov 03 2025 - 19:37:00 CET

This archive was generated by hypermail 2.3.0 : Mon Nov 03 2025 - 19:48:37 CET