diff mbox series

expand: Fix trailing newlines processing in backquote expanding

Message ID 20190429141337.6804-1-n.merinov@inango-systems.com
State Accepted
Delegated to: Herbert Xu
Headers show
Series expand: Fix trailing newlines processing in backquote expanding | expand

Commit Message

Nikolai Merinov April 29, 2019, 2:13 p.m. UTC
According to POSIX.1-2008 we should remove newlines only at the end of
the substitution. Newlines-only substitions causes dash to remove
newlines before beggining of the substitution. The following code:

    cat <<END
    1
    $(echo "")
    2
    END

prints "1<newline>2" instead of expected "1<newline><newline>2".

This patch fixes trailing newlines processing in backquote expanding.

Signed-off-by: Nikolai Merinov <n.merinov@inango-systems.com>
---
 src/expand.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Nikolai Merinov Jan. 13, 2020, 12:08 p.m. UTC | #1
Hi Herbert,

Do you want any changes to this patch from us? This patch in state "Under Review" more then 8 months.

Regards,
Nikolai

----- Original Message -----
> From: "n merinov" <n.merinov@inango-systems.com>
> To: dash@vger.kernel.org
> Cc: "os" <os@inango-systems.com>, "n merinov" <n.merinov@inango-systems.com>
> Sent: Monday, April 29, 2019 7:13:37 PM
> Subject: [PATCH] expand: Fix trailing newlines processing in backquote expanding

> According to POSIX.1-2008 we should remove newlines only at the end of
> the substitution. Newlines-only substitions causes dash to remove
> newlines before beggining of the substitution. The following code:
> 
>    cat <<END
>    1
>    $(echo "")
>    2
>    END
> 
> prints "1<newline>2" instead of expected "1<newline><newline>2".
> 
> This patch fixes trailing newlines processing in backquote expanding.
> 
> Signed-off-by: Nikolai Merinov <n.merinov@inango-systems.com>
> ---
> src/expand.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/src/expand.c b/src/expand.c
> index af9cac9..1b1f95e 100644
> --- a/src/expand.c
> +++ b/src/expand.c
> @@ -525,7 +525,7 @@ read:
> 
> 	/* Eat all trailing newlines */
> 	dest = expdest;
> -	for (; dest > (char *)stackblock() && dest[-1] == '\n';)
> +	for (; dest > ((char *)stackblock() + startloc) && dest[-1] == '\n';)
> 		STUNPUTC(dest);
> 	expdest = dest;
> 
> --
> 2.17.1
Herbert Xu Jan. 15, 2020, 6 a.m. UTC | #2
On Mon, Jan 13, 2020 at 02:08:05PM +0200, Nikolai Merinov wrote:
> Hi Herbert,
> 
> Do you want any changes to this patch from us? This patch in state "Under Review" more then 8 months.

Sorry I just had no time to work on dash patches.  I'll try to
work on the backlog fairly soon.

Cheers,
Herbert Xu Jan. 20, 2020, 9:56 a.m. UTC | #3
On Mon, Apr 29, 2019 at 07:13:37PM +0500, Nikolai Merinov wrote:
> According to POSIX.1-2008 we should remove newlines only at the end of
> the substitution. Newlines-only substitions causes dash to remove
> newlines before beggining of the substitution. The following code:
> 
>     cat <<END
>     1
>     $(echo "")
>     2
>     END
> 
> prints "1<newline>2" instead of expected "1<newline><newline>2".
> 
> This patch fixes trailing newlines processing in backquote expanding.
> 
> Signed-off-by: Nikolai Merinov <n.merinov@inango-systems.com>
> ---
>  src/expand.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

Patch applied.  Thanks.
diff mbox series

Patch

diff --git a/src/expand.c b/src/expand.c
index af9cac9..1b1f95e 100644
--- a/src/expand.c
+++ b/src/expand.c
@@ -525,7 +525,7 @@  read:
 
 	/* Eat all trailing newlines */
 	dest = expdest;
-	for (; dest > (char *)stackblock() && dest[-1] == '\n';)
+	for (; dest > ((char *)stackblock() + startloc) && dest[-1] == '\n';)
 		STUNPUTC(dest);
 	expdest = dest;