Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 17 Dec 2001 18:27:02 +0300
From:      "Vladimir B.Grebenschikov" <vova@sw.ru>
To:        FreeBSD-gnats-submit@freebsd.org
Subject:   bin/32935: /bin/sh buildin echo command have invalid implimentation of command args parser
Message-ID:  <E16FzfS-0006UA-00@vbook.express.ru>

next in thread | raw e-mail | index | archive | help

>Number:         32935
>Category:       bin
>Synopsis:       /bin/sh buildin echo command have invalid implimentation of command args parser
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon Dec 17 07:30:00 PST 2001
>Closed-Date:
>Last-Modified:
>Originator:     Vladimir B. Grebenschikov
>Release:        FreeBSD 5.0-CURRENT i386
>Organization:
SWsoft
>Environment:
System: FreeBSD vbook.express.ru 5.0-CURRENT FreeBSD 5.0-CURRENT #4: Mon Dec 17 12:45:42 MSK 2001 root@vbook.express.ru:/usr/local/src/sys/i386/compile/VBOOK i386

also same problem in 4.4-RELEASE

>Description:

According to manpage sh(1):

     echo [-en] string
             Print string to the standard output with a newline appended.

             -n      Suppress the output of the trailing newline.

             -e      Process C-style backslash escape sequences.  echo under-
                     stands the following character escapes:

But in realality echo accepts either -n or -e flag but not both simultaneously.


>How-To-Repeat:

$ echo -en  "\tGGG\nJJJ\nccc"
-en \tGGG\nJJJ\nccc
$ 

but:

$ echo -e  "\tGGG\nJJJ\nccc"
        GGG
JJJ
ccc
$

$ echo -n "test"
test$ 

>Fix:

diff -u src/bin/sh/bltin/echo.c:1.9.2.1
src/bin/sh/bltin/echo.c:1.9.2.1.10000.2
--- src/bin/sh/bltin/echo.c:1.9.2.1     Fri Jun 30 00:51:59 2000
+++ src/bin/sh/bltin/echo.c     Mon Dec 17 18:15:23 2001
@@ -34,7 +34,7 @@
  * SUCH DAMAGE.
  *
  *     @(#)echo.c      8.2 (Berkeley) 5/4/95
- * $FreeBSD: src/bin/sh/bltin/echo.c,v 1.9.2.1 2000/06/29 20:51:59 mph Exp
$
+ * $FreeBSD: src/bin/sh/bltin/echo.c,v 1.9.2.1.10000.2 2001/12/17 15:15:23
kmv Exp $
  */
 
 /*
@@ -64,16 +64,28 @@
        ap = argv;
        if (argc)
                ap++;
-       if ((p = *ap) != NULL) {
-               if (equal(p, "-n")) {
-                       nflag++;
-                       ap++;
-               } else if (equal(p, "-e")) {
+       if ((p = *ap) != NULL && *p == '-') {
+               ap++;
+               p++;
+               do {
+                       if (*p == 'n') { 
+                               nflag++;
+                       }
+#ifndef eflag
+                       else if (*p == 'e') {
+                               eflag++;
+                       }
+#endif
+                       else {
+                               nflag = 0;
 #ifndef eflag
-                       eflag++;
+                               eflag = 0;
 #endif
-                       ap++;
-               }
+                               ap--;
+                               break;
+                       }
+                       p++;
+               } while (*p); 
        }
        while ((p = *ap++) != NULL) {
                while ((c = *p++) != '\0') {

--
SWSoft, Moscow
Vladimir B. Grebenschikov vova@sw.ru
>Release-Note:
>Audit-Trail:
>Unformatted:

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?E16FzfS-0006UA-00>