summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--emu/port/devenv.c12
-rw-r--r--os/port/devenv.c8
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);