Module Name:    src
Committed By:   martin
Date:           Sun Jun  7 12:50:17 UTC 2020

Modified Files:
        src/bin/sh [netbsd-9]: expand.c expand.h

Log Message:
Pull up following revision(s) (requested by kre in ticket #940):

        bin/sh/expand.h: revision 1.25
        bin/sh/expand.c: revision 1.134
        bin/sh/expand.c: revision 1.135
        bin/sh/expand.c: revision 1.136
        bin/sh/expand.c: revision 1.137

Remove a (completely harmless) duplicate assignment introduced in a
code merge from FreeBSD in 2017.   NFC.

Pointed out by Roland Illig.

prevent sign extension from making expression always false.
remove masking and cast (requested by kre@)

When expanding a here-doc (NXHERE - the type with an unquoted end delim)
the output will not be further processed (at all) so there is no need
to escape magic chars in the output, and doing so leaves stray CTLESC
chars in the here doc text.  Not good.   So don't do that...

To save a strlen() of the result, to determine the size of the here doc,
make rmescapes() return the length of the resulting string (this isn't
needed for other uses, so didn't happen previously).

Reported on current-users@ (2020-02-06) by Jun Ebihara

XXX pullup -9


To generate a diff of this commit:
cvs rdiff -u -r1.132.2.1 -r1.132.2.2 src/bin/sh/expand.c
cvs rdiff -u -r1.24 -r1.24.2.1 src/bin/sh/expand.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/bin/sh/expand.c
diff -u src/bin/sh/expand.c:1.132.2.1 src/bin/sh/expand.c:1.132.2.2
--- src/bin/sh/expand.c:1.132.2.1	Sun Nov 24 08:24:06 2019
+++ src/bin/sh/expand.c	Sun Jun  7 12:50:17 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: expand.c,v 1.132.2.1 2019/11/24 08:24:06 martin Exp $	*/
+/*	$NetBSD: expand.c,v 1.132.2.2 2020/06/07 12:50:17 martin Exp $	*/
 
 /*-
  * Copyright (c) 1991, 1993
@@ -37,7 +37,7 @@
 #if 0
 static char sccsid[] = "@(#)expand.c	8.5 (Berkeley) 5/15/95";
 #else
-__RCSID("$NetBSD: expand.c,v 1.132.2.1 2019/11/24 08:24:06 martin Exp $");
+__RCSID("$NetBSD: expand.c,v 1.132.2.2 2020/06/07 12:50:17 martin Exp $");
 #endif
 #endif /* not lint */
 
@@ -146,10 +146,12 @@ STATIC void rmescapes_nl(char *);
 void
 expandhere(union node *arg, int fd)
 {
+	int len;
 
 	herefd = fd;
 	expandarg(arg, NULL, 0);
-	xwrite(fd, stackblock(), expdest - stackblock());
+	len = rmescapes(stackblock());
+	xwrite(fd, stackblock(),  len);
 }
 
 
@@ -268,12 +270,12 @@ argstr(const char *p, int flag)
 			return p - 1;
 		case CTLENDVAR: /* end of expanding yyy in ${xxx-yyy} */
 		case CTLENDARI: /* end of a $(( )) string */
-			if (had_dol_at && (*p&0xFF) == CTLQUOTEEND)
+			if (had_dol_at && *p == CTLQUOTEEND)
 				p++;
 			NULLTERM_4_TRACE(expdest);
 			VTRACE(DBG_EXPAND, ("argstr returning at \"%.6s\"..."
 			    " after %2.2X; added \"%s\" to expdest\n",
-			    p, (c&0xff), stackblock()));
+			    p, (c & 0xff), stackblock()));
 			return p;
 		case CTLQUOTEMARK:
 			/* "$@" syntax adherence hack */
@@ -307,7 +309,7 @@ argstr(const char *p, int flag)
 			had_dol_at = 0;
 			break;
 		case CTLESC:
-			if (quotes || ISCTL(*p))
+			if ((quotes || ISCTL(*p)))
 				STPUTC(c, expdest);
 			c = *p++;
 			STPUTC(c, expdest);
@@ -1955,7 +1957,6 @@ patmatch(const char *pattern, const char
 			}
 			/* end shortcut */
 
-			invert = 0;
 			savep = p, saveq = q;
 			invert = 0;
 			if (*p == '!' || *p == '^') {
@@ -2038,9 +2039,11 @@ patmatch(const char *pattern, const char
 
 /*
  * Remove any CTLESC or CTLNONL characters from a string.
+ *
+ * String is modified in place, and we return the length of the result
  */
 
-void
+int
 rmescapes(char *str)
 {
 	char *p, *q;
@@ -2048,7 +2051,7 @@ rmescapes(char *str)
 	p = str;
 	while (!ISCTL(*p)) {
 		if (*p++ == '\0')
-			return;
+			return ((int)(p - str) - 1);
 	}
 	q = p;
 	while (*p) {
@@ -2070,6 +2073,8 @@ rmescapes(char *str)
 		*q++ = *p++;
 	}
 	*q = '\0';
+
+	return ((int)(q - str));
 }
 
 /*

Index: src/bin/sh/expand.h
diff -u src/bin/sh/expand.h:1.24 src/bin/sh/expand.h:1.24.2.1
--- src/bin/sh/expand.h:1.24	Sun Nov 18 17:23:37 2018
+++ src/bin/sh/expand.h	Sun Jun  7 12:50:17 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: expand.h,v 1.24 2018/11/18 17:23:37 kre Exp $	*/
+/*	$NetBSD: expand.h,v 1.24.2.1 2020/06/07 12:50:17 martin Exp $	*/
 
 /*-
  * Copyright (c) 1991, 1993
@@ -67,5 +67,5 @@ union node;
 
 void expandhere(union node *, int);
 void expandarg(union node *, struct arglist *, int);
-void rmescapes(char *);
+int rmescapes(char *);
 int casematch(union node *, char *);

Reply via email to