[PATCH 2/2] sed: terminate branch commands at }

Csókás Bence csokas.bence at prolan.hu
Wed Mar 5 12:57:46 UTC 2025


Hi,

On 2025. 03. 05. 5:38, Jeremy Drake wrote:
> in GNU sed, `echo foo | sed -e '/bar/{b};d'` is valid, but in busybox
> sed would fail with unmatched {.

I beg to differ:
	$ echo foo | sed -e 'bar{b};d'
	sed: -e expression #1, char 6: unexpected `}'
	$ sed --version
	sed (GNU sed) 4.8
	Packaged by Debian
	Copyright (C) 2020 Free Software Foundation, Inc.
	License GPLv3+: GNU GPL version 3 or later 
<https://gnu.org/licenses/gpl.html>.
	This is free software: you are free to change and redistribute it.
	There is NO WARRANTY, to the extent permitted by law.
	[...]
	$ echo foo | busybox sed -e 'bar{b};d'
	sed: can't find label for jump to 'ar{b}'
	$ busybox sed --version
	This is not GNU sed version 4.0
	$ busybox
	BusyBox v1.36.1 (2024-12-20 13:06:58 UTC) multi-call binary.
	[...]

> Signed-off-by: Jeremy Drake <busybox at jdrake.com>
> ---
> In strict posix, not even semicolon terminates a label, but busybox seems
> to mostly follow GNU.
> 
> I'm not sure about the 'style' of this fix, there might be a more
> idiomatic way to do this.
> 
>   editors/sed.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/editors/sed.c b/editors/sed.c
> index de411fbf4..6563c270c 100644
> --- a/editors/sed.c
> +++ b/editors/sed.c
> @@ -133,7 +133,7 @@ typedef struct sed_cmd_s {
>   	char cmd;               /* The command char: abcdDgGhHilnNpPqrstwxy:={} */
>   } sed_cmd_t;
> 
> -static const char semicolon_whitespace[] ALIGN1 = "; \n\r\t\v";
> +#define semicolon_whitespace "; \n\r\t\v"
> 
>   struct globals {
>   	/* options */
> @@ -613,7 +613,7 @@ static const char *parse_cmd_args(sed_cmd_t *sed_cmd, const char *cmdstr)
>   		int length;
> 
>   		cmdstr = skip_whitespace(cmdstr);
> -		length = strcspn(cmdstr, semicolon_whitespace);
> +		length = strcspn(cmdstr, semicolon_whitespace "}");

I would much rather have a separate `static const char []` for this instead.

Bence



More information about the busybox mailing list