diff options
| author | Charles.Forsyth <devnull@localhost> | 2007-01-23 09:36:04 +0000 |
|---|---|---|
| committer | Charles.Forsyth <devnull@localhost> | 2007-01-23 09:36:04 +0000 |
| commit | 95028768b488f6878c9f26978d56aeb54fb5cf1e (patch) | |
| tree | b7ba04789e06dfa15a72fa59029c0c9fe6422d72 /emu/port/devenv.c | |
| parent | ed8b7fd462e0202888a27ee1972409c52dec7d01 (diff) | |
check length in devenv.c
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); |
