On 01/ 6/14 08:51 PM, David Korn wrote:
Yes, I will look into making this change for the next ksh93 update.
Thank you. Is there an estimate on the release date?

In the meantime would this be sufficient to ignore
the KSH_VERSION passed in from the environment?

   1 --- a/src/cmd/ksh93/sh/init.c
   2 +++ b/src/cmd/ksh93/sh/init.c
3 @@ -1903,6 +1903,13 @@ static Dt_t *inittree(Shell_t *shp,const struct shtable2 *name_vals)
   4         return(treep);
   5  }
   6
   7 +static int is_read_only(const char* cp, const char* dp)
   8 +{
   9 +        if(strncmp(cp, "KSH_VERSION", dp-cp)==0)
  10 +                return(1);
  11 +        return(0);
  12 +}
  13 +
  14  /*
  15   * read in the process environment and set up name-value pairs
  16   * skip over items that are not name-value pairs
  17 @@ -1930,6 +1937,8 @@ static void env_init(Shell_t *shp)
  18                 dp = strchr(cp,'=');
  19                 if(!dp)
  20                         continue;
  21 +                if(is_read_only(cp, dp))
  22 +                        continue;
  23                 *dp++ = 0;
  24                 if(mp = dtmatch(shp->var_base,cp))
  25                 {
  26

Should there be something else ignored besides KSH_VERSION?

Tomas Klacko




On Mon, Jan 6, 2014 at 12:55 PM, Tomas Klacko <[email protected] <mailto:[email protected]>> wrote:

    On 01/ 6/14 05:53 PM, ольга крыжановская wrote:

        No fix. KSH_VERSION is a read only variable, always defined to be
        nameref for .sh.version, which itself is set at shell startup
        time to
        the version of the ksh shell. Setting it is not allowed, nor
        useful,
        by definition.

        Olga

    Would it be possible then for the ksh to check for such variables
    being passed to it from the environment and to ignore them
    (instead of crashing)?

    Tomas Klacko



        On Mon, Jan 6, 2014 at 5:45 PM, Tomas Klacko
        <[email protected] <mailto:[email protected]>> wrote:

            Hi,

            Setting the KSH_VERSION variable to some value before
            running ksh
            from other shell makes the ksh to core dump:

            user@host:~$ env | grep SHELL
            SHELL=/bin/bash
            XTERM_SHELL=/bin/bash
            user@host:~$ export KSH_VERSION=abcd
            user@host:~$ ksh
            Segmentation Fault (core dumped)
            user@host:~$

            For KSH_VERSION=abcd, ksh does (at the end of the
            nv_putval() function)
            memmove(cp,sp,dot);):

                 np->nvalue.cp="abcd"

            the code then later uses:

                 np->nvalue.nrp->np

            which contains "abcd" as pointer value.

            What should be the fix here?

            Tomas Klacko
            _______________________________________________
            ast-developers mailing list
            [email protected]
            <mailto:[email protected]>
            http://lists.research.att.com/mailman/listinfo/ast-developers




    _______________________________________________
    ast-developers mailing list
    [email protected]
    <mailto:[email protected]>
    http://lists.research.att.com/mailman/listinfo/ast-developers



_______________________________________________
ast-developers mailing list
[email protected]
http://lists.research.att.com/mailman/listinfo/ast-developers

Reply via email to