diff -up ksh-20100621/src/cmd/ksh93/sh/name.c.oopfix ksh-20100621/src/cmd/ksh93/sh/name.c --- ksh-20100621/src/cmd/ksh93/sh/name.c.oopfix 2010-05-24 20:32:32.000000000 +0200 +++ ksh-20100621/src/cmd/ksh93/sh/name.c 2012-03-02 13:57:35.630402636 +0100 @@ -362,6 +362,8 @@ void nv_setlist(register struct argnod * } } np = nv_open(cp,shp->var_tree,flag|NV_ASSIGN); + if(nv_isattr(np,NV_RDONLY) && np->nvfun && !(flags&NV_RDONLY)) + errormsg(SH_DICT,ERROR_exit(1),e_readonly, nv_name(np)); if(typ && !array && (nv_isnull(np) || nv_isarray(np))) nv_settype(np,typ,0); if((flags&NV_STATIC) && !nv_isattr(np,NV_EXPORT) && !nv_isnull(np))