Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 26 Jul 2020 09:15:05 +0000 (UTC)
From:      Yuri Pankov <yuripv@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r363543 - in head/usr.bin/sed: . tests
Message-ID:  <202007260915.06Q9F5YY094456@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: yuripv
Date: Sun Jul 26 09:15:05 2020
New Revision: 363543
URL: https://svnweb.freebsd.org/changeset/base/363543

Log:
  sed: treat '[' as ordinary character in 'y' command
  
  'y' does not handle bracket expressions, treat '[' as ordinary character
  and do not apply bracket expression checks (GNU sed agrees).
  
  PR:		247931
  Reviewed by:	pfg, kevans
  Tested by:	antoine (exp-run), Quentin L'Hours <lhoursquentin@gmail.com>
  Differential Revision:	https://reviews.freebsd.org/D25640

Modified:
  head/usr.bin/sed/compile.c
  head/usr.bin/sed/tests/sed2_test.sh

Modified: head/usr.bin/sed/compile.c
==============================================================================
--- head/usr.bin/sed/compile.c	Sun Jul 26 02:51:00 2020	(r363542)
+++ head/usr.bin/sed/compile.c	Sun Jul 26 09:15:05 2020	(r363543)
@@ -437,11 +437,19 @@ compile_delimited(char *p, char *d, int is_tr)
 				linenum, fname);
 	while (*p) {
 		if (*p == '[' && *p != c) {
-			if ((d = compile_ccl(&p, d)) == NULL)
-				errx(1, "%lu: %s: unbalanced brackets ([])", linenum, fname);
-			continue;
+			if (!is_tr) {
+				if ((d = compile_ccl(&p, d)) == NULL) {
+					errx(1,
+					    "%lu: %s: unbalanced brackets ([])",
+					    linenum, fname);
+				}
+				continue;
+			}
 		} else if (*p == '\\' && p[1] == '[') {
-			*d++ = *p++;
+			if (is_tr)
+				p++;
+			else
+				*d++ = *p++;
 		} else if (*p == '\\' && p[1] == c) {
 			p++;
 		} else if (*p == '\\' &&

Modified: head/usr.bin/sed/tests/sed2_test.sh
==============================================================================
--- head/usr.bin/sed/tests/sed2_test.sh	Sun Jul 26 02:51:00 2020	(r363542)
+++ head/usr.bin/sed/tests/sed2_test.sh	Sun Jul 26 09:15:05 2020	(r363543)
@@ -134,6 +134,22 @@ commands_on_stdin_body()
 	atf_check -o 'empty' sed -f - < insert_x
 }
 
+atf_test_case bracket_y
+bracket_y_head()
+{
+	atf_set "descr" "Verify '[' is ordinary character for 'y' command"
+}
+bracket_y_body()
+{
+	atf_check -e empty -o ignore echo | sed 'y/[/x/'
+	atf_check -e empty -o ignore echo | sed 'y/[]/xy/'
+	atf_check -e empty -o ignore echo | sed 'y/[a]/xyz/'
+	atf_check -e empty -o "inline:zyx" echo '][a' | sed 'y/[a]/xyz/'
+	atf_check -e empty -o "inline:bracket\n" echo 'bra[ke]' | sed 'y/[]/ct/'
+	atf_check -e empty -o "inline:bracket\n" \
+	    echo 'bra[ke]' | sed 'y[\[][ct['
+}
+
 atf_init_test_cases()
 {
 	atf_add_test_case inplace_command_q
@@ -142,4 +158,5 @@ atf_init_test_cases()
 	atf_add_test_case escape_subst
 	atf_add_test_case commands_on_stdin
 	atf_add_test_case hex_subst
+	atf_add_test_case bracket_y
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202007260915.06Q9F5YY094456>