Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 8 May 2000 17:26:45 +0900 (JST)
From:      mori@tri.asanuma.co.jp
To:        FreeBSD-gnats-submit@freebsd.org
Subject:   bin/18447: /bin/sh: wrong parse eval
Message-ID:  <200005080826.RAA68289@kurishna.tri.asanuma.co.jp>

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

>Number:         18447
>Category:       bin
>Synopsis:       /bin/sh: wrong parse eval
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Mon May 08 04:40:02 PDT 2000
>Closed-Date:
>Last-Modified:
>Originator:     Koji Mori
>Release:        FreeBSD 3.4-STABLE i386
>Organization:
>Environment:

FreeBSD kurishna.tri.asanuma.co.jp 3.4-STABLE FreeBSD 3.4-STABLE #26: Thu Apr  6 15:48:03 JST 2000     mori@kurishna.tri.asanuma.co.jp:/usr/src/sys/compile/KOTONE  i386


>Description:

This problem is on /bin/sh.

If /bin/sh evaluates a string with `eval' statement and the string
has semicolon at the end, then /bin/sh doesn't process the `eval'
statement.

for example:

  $ /bin/sh -c 'eval echo t'
  t
  $ /bin/sh -c 'eval echo t;'
  $

or

  $ cat test.sh
  #! /bin/sh
  cmd1='eval echo 1;'
  cmd2='eval echo 2'
  eval $cmd1
  eval $cmd2
  $ /bin/sh test.sh
  2
  $

And if the string has multiplue eval statement, then /bin/sh doesn't
process first eval statements, but processes others.

for example:

  $ /bin/sh -c 'eval echo 1; eval echo 2; eval echo 3;'
  2
  3
  $

I think its behavior is /bin/sh's bug.  Other shells reading Bourne
shell script, such as bash or SunOS's /bin/sh, process all eval
statement for above cases.  But NetBSD's /bin/sh is same as FreeBSD.


>How-To-Repeat:

Simple example is

 $ /bin/sh -c 'eval echo 1; eval echo 2;'

The result is

 2

but we expected 

 1
 2


>Fix:

To fix, apply this patch to src/bin/sh/parser.c

diff -u -r1.30 parser.c
--- parser.c	2000/04/20 09:49:16	1.30
+++ parser.c	2000/04/29 01:22:14
@@ -137,6 +137,7 @@
 {
 	int t;
 
+	tokpushback = 0;
 	doprompt = interact;
 	if (doprompt)
 		setprompt(1);

>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?200005080826.RAA68289>