summaryrefslogtreecommitdiff
path: root/emu/port/devenv.c
diff options
context:
space:
mode:
Diffstat (limited to 'emu/port/devenv.c')
-rw-r--r--emu/port/devenv.c12
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);