diff options
Diffstat (limited to 'emu/port/devenv.c')
| -rw-r--r-- | emu/port/devenv.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/emu/port/devenv.c b/emu/port/devenv.c index 104d6344..9f56ce7d 100644 --- a/emu/port/devenv.c +++ b/emu/port/devenv.c @@ -5,6 +5,12 @@ #include "fns.h" #include "error.h" +enum +{ + Maxenvlen= 16*1024-1, +}; + + static void envremove(Chan*); static int @@ -168,12 +174,15 @@ static long envwrite(Chan *c, void *a, long n, vlong offset) { char *s; - int ve; + ulong ve; Egrp *eg; Evalue *e; if(n <= 0) return 0; + ve = offset+n; + if(ve > Maxenvlen) + error(Etoobig); eg = up->env->egrp; qlock(&eg->l); for(e = eg->entries; e != nil; e = e->next) @@ -183,7 +192,6 @@ envwrite(Chan *c, void *a, long n, vlong offset) qunlock(&eg->l); error(Enonexist); } - ve = offset+n; if(ve > e->len) { s = smalloc(ve); memmove(s, e->val, e->len); |
