public inbox for dash@vger.kernel.org
 help / color / mirror / Atom feed
From: Juergen Daubert <j.daubert@posteo.de>
To: Herbert Xu <herbert@gondor.apana.org.au>
Cc: Dash <dash@vger.kernel.org>
Subject: Re: [PATCH] shell: Fix unsigned char promotion and truncation
Date: Thu, 23 Oct 2025 11:29:43 +0000	[thread overview]
Message-ID: <aPoRpuQWtKeQq5T-@jue> (raw)
In-Reply-To: <aPeKvExPB1HluHly@gondor.apana.org.au>

On Tue, Oct 21, 2025 at 09:29:32PM +0800, Herbert Xu wrote:
> On Mon, Oct 20, 2025 at 12:31:03PM +0000, j.daubert@posteo.de wrote:
> > We are using dash 0.5.13.1 as /bin/sh and running into several build
> > problems on ARM64,
> > for example curl:
> 
> Thanks for the report!
> 
> I can reproduce this and it appears to be a couple of instances of
> incorrect unsigned char (the default on arm64) promotion.
> 
> Please try this patch:

Thanks for the quick fix!

We've tested 0.5.13.1 together with that patch by building a lot of
important programs [1] with dash as /bin/sh and everything works fine 
now on x86_64 and ARM64. 

IMO we are at a stable point in the dash development again, looking
forward to see 0.5.14 ;)

Thanks again
Juergen


[1] https://git.crux.nu/ports/core


> 
> ---8<---
> When a char is promoted to an int, it needs to be signed as otherwise
> comparisons on it may fail.  Alternatively, an integer needs to be
> truncated to char before comparing it against another char.
> 
> Reported-by: Juergen Daubert <j.daubert@posteo.de> 
> Fixes: e878137f63e6 ("expand: Do not call rmescapes in expari")
> Fixes: c5bf9702ea11 ("expand: Add multi-byte support to pmatch")
> Fixes: 8f01c3796f0f ("[PARSER] Add FAKEEOFMARK for expandstr")
> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
> 
> diff --git a/src/expand.c b/src/expand.c
> index 912384d..8c8bf0e 100644
> --- a/src/expand.c
> +++ b/src/expand.c
> @@ -1914,7 +1914,7 @@ static int pmatch(char *pattern, const char *string)
>  			if (c == '?' || c == '[')
>  				c = CTLESC;
>  			for (;;) {
> -				if (c != CTLESC) {
> +				if (c != (char)CTLESC) {
>  					/* Stop should be null-terminated
>  					 * as it is passed as a string to
>  					 * strpbrk(3).
> @@ -1985,7 +1985,7 @@ static int pmatch(char *pattern, const char *string)
>  					p++;
>  					if (*p == (char)CTLESC)
>  						p++;
> -					else if (*p == CTLMBCHAR) {
> +					else if (*p == (char)CTLMBCHAR) {
>  						mbp = mbnext(p);
>  						p += mbp & 0xff;
>  						p += mbp >> 8;
> diff --git a/src/parser.c b/src/parser.c
> index eb402a7..5714958 100644
> --- a/src/parser.c
> +++ b/src/parser.c
> @@ -1240,7 +1240,7 @@ checkend: {
>  
>  		markloc = out - (char *)stackblock();
>  		for (p = eofmark; STPUTC(c, out), *p; p++) {
> -			if (c != *p)
> +			if (c != (signed char)*p)
>  				goto more_heredoc;
>  
>  			c = pgetc();
> -- 
> Email: Herbert Xu <herbert@gondor.apana.org.au>
> Home Page: http://gondor.apana.org.au/~herbert/
> PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
> 

      reply	other threads:[~2025-10-23 11:29 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-10-20 12:31 dash 0.5.13.1: problems with dash as /bin/sh on ARM64 j.daubert
2025-10-21 13:29 ` [PATCH] shell: Fix unsigned char promotion and truncation Herbert Xu
2025-10-23 11:29   ` Juergen Daubert [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aPoRpuQWtKeQq5T-@jue \
    --to=j.daubert@posteo.de \
    --cc=dash@vger.kernel.org \
    --cc=herbert@gondor.apana.org.au \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox