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

Jeremy Drake busybox at jdrake.com
Wed Mar 5 04:38:20 UTC 2025


in GNU sed, `echo foo | sed -e '/bar/{b};d'` is valid, but in busybox
sed would fail with unmatched {.

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 "}");
 		if (length) {
 			sed_cmd->string = xstrndup(cmdstr, length);
 			cmdstr += length;
-- 
2.48.1.windows.1



More information about the busybox mailing list