diff options
| -rw-r--r-- | emu/port/devenv.c | 12 | ||||
| -rw-r--r-- | os/port/devenv.c | 8 |
2 files changed, 14 insertions, 6 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); diff --git a/os/port/devenv.c b/os/port/devenv.c index da6373a2..f58c0c74 100644 --- a/os/port/devenv.c +++ b/os/port/devenv.c @@ -179,12 +179,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 > Maxenvsize) + error(Etoobig); eg = up->env->egrp; qlock(eg); if(waserror()){ @@ -196,9 +199,6 @@ envwrite(Chan *c, void *a, long n, vlong offset) break; if(e == nil) error(Enonexist); - ve = offset+n; - if(ve > Maxenvsize) - error(Etoobig); if(ve > e->len) { s = smalloc(ve); memmove(s, e->val, e->len); |
