git: 0552fdc62caf - main - sed: fix commandline-given expression when -e is not used
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 07 Nov 2024 03:43:12 UTC
The branch main has been updated by kevans:
URL: https://cgit.FreeBSD.org/src/commit/?id=0552fdc62caf034397ffd5b07dfbad853aef5aa8
commit 0552fdc62caf034397ffd5b07dfbad853aef5aa8
Author: Martin Cracauer <cracauer@FreeBSD.org>
AuthorDate: 2024-11-07 03:40:02 +0000
Commit: Kyle Evans <kevans@FreeBSD.org>
CommitDate: 2024-11-07 03:40:45 +0000
sed: fix commandline-given expression when -e is not used
Make explicit sed commands (first on commandline) behave the same
as those given with -e.
Without this patch the following two commands behave differently,
the second one being wrong:
echo ab | sed -e $'1 i\\\n--'
echo ab | sed $'1 i\\\n--'
Reviewed by: 0mp, des, kevans
Sponsored by: Klara, Inc.
Differential Revision: https://reviews.freebsd.org/D47377
---
usr.bin/sed/main.c | 10 +++++-----
usr.bin/sed/tests/sed2_test.sh | 13 +++++++++++++
2 files changed, 18 insertions(+), 5 deletions(-)
diff --git a/usr.bin/sed/main.c b/usr.bin/sed/main.c
index 7cc01eb18147..84e1dfa538e6 100644
--- a/usr.bin/sed/main.c
+++ b/usr.bin/sed/main.c
@@ -137,10 +137,8 @@ main(int argc, char *argv[])
break;
case 'e':
eflag = 1;
- if ((temp_arg = malloc(strlen(optarg) + 2)) == NULL)
- err(1, "malloc");
- strcpy(temp_arg, optarg);
- strcat(temp_arg, "\n");
+ if (asprintf(&temp_arg, "%s\n", optarg) == -1)
+ err(1, "asprintf");
add_compunit(CU_STRING, temp_arg);
break;
case 'f':
@@ -173,7 +171,9 @@ main(int argc, char *argv[])
/* First usage case; script is the first arg */
if (!eflag && !fflag && *argv) {
- add_compunit(CU_STRING, *argv);
+ if (asprintf(&temp_arg, "%s\n", *argv) == -1)
+ err(1, "asprintf");
+ add_compunit(CU_STRING, temp_arg);
argv++;
}
diff --git a/usr.bin/sed/tests/sed2_test.sh b/usr.bin/sed/tests/sed2_test.sh
index a7408b2560a7..f50619612561 100755
--- a/usr.bin/sed/tests/sed2_test.sh
+++ b/usr.bin/sed/tests/sed2_test.sh
@@ -147,6 +147,18 @@ bracket_y_body()
echo 'bra[ke]' | sed 'y[\[][ct['
}
+atf_test_case minus_e
+minus_e_head()
+{
+ atf_set "descr" "Verify that -e and implicit arg do the same thing"
+}
+minus_e_body()
+{
+ printf "ab\n" > a
+ atf_check -o 'inline:--\nab\n' sed -e $'1 i\\\n--' a
+ atf_check -o 'inline:--\nab\n' sed $'1 i\\\n--' a
+}
+
atf_init_test_cases()
{
atf_add_test_case inplace_command_q
@@ -156,4 +168,5 @@ atf_init_test_cases()
atf_add_test_case commands_on_stdin
atf_add_test_case hex_subst
atf_add_test_case bracket_y
+ atf_add_test_case minus_e
}