expand: Fix scanright zero handling when fnmatch is disabled

Herbert Xu <[email protected]> Sun, 9 Mar 2025 16:51:53 +0800
Newsgroups org.kernel.vger.dash
Message-ID <[email protected]>
Johannes Altmanninger <[email protected]> wrote:
> I noticed another regression in c5bf970 (expand: Add multi-byte
> support to pmatch, 2024-06-02).
> 
> This command now prints "abc-def" but used to print "ef".
> 
>        x=abc-def
>        y="${x##*d}"
>        echo "$y"

Fix this by setting s to the correct value in scanright based
on FNMATCH_IS_ENABLED.

Fixes: c5bf9702ea11 ("expand: Add multi-byte support to pmatch")
Signed-off-by: Herbert Xu <[email protected]>

diff --git a/src/expand.c b/src/expand.c
index 7a30648..0066e1a 100644
--- a/src/expand.c
+++ b/src/expand.c
@@ -650,7 +650,7 @@ static char *scanright(char *startp, char *endp, char *rmesc, char *rmescend,
 
 		if (zero) {
 			*s = '\0';
-			s = rmesc;
+			s = FNMATCH_IS_ENABLED ? rmesc : startp;
 		}
 		match = pmatch(str, s);
 		*(FNMATCH_IS_ENABLED ? loc2 : loc) = c;

Thanks,
-- 
Email: Herbert Xu <[email protected]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt