summaryrefslogtreecommitdiff
path: root/sys/src/cmd/webfs
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2012-05-18 20:25:50 +0200
committercinap_lenrek <cinap_lenrek@gmx.de>2012-05-18 20:25:50 +0200
commit9891d13887d66ecee6d6ae960df764d5b8dbc2df (patch)
treefccc8e2233ad32ce08eaa0cba097365f808fdcfc /sys/src/cmd/webfs
parentfeca85431791736244f7e2c1505ad9976314d9b4 (diff)
webfs: nstrcpy paranoia
Diffstat (limited to 'sys/src/cmd/webfs')
-rw-r--r--sys/src/cmd/webfs/fns.h2
-rw-r--r--sys/src/cmd/webfs/fs.c6
-rw-r--r--sys/src/cmd/webfs/http.c8
-rw-r--r--sys/src/cmd/webfs/sub.c7
4 files changed, 16 insertions, 7 deletions
diff --git a/sys/src/cmd/webfs/fns.h b/sys/src/cmd/webfs/fns.h
index 747ebd729..9cd6f2ae2 100644
--- a/sys/src/cmd/webfs/fns.h
+++ b/sys/src/cmd/webfs/fns.h
@@ -2,6 +2,8 @@
void* emalloc(int n);
char* estrdup(char *s);
+void nstrcpy(char *to, char *from, int n);
+
Key* addkey(Key *h, char *key, char *val);
Key* delkey(Key *h, char *key);
char* lookkey(Key *k, char *key);
diff --git a/sys/src/cmd/webfs/fs.c b/sys/src/cmd/webfs/fs.c
index 2d2c7c063..ab21bce7a 100644
--- a/sys/src/cmd/webfs/fs.c
+++ b/sys/src/cmd/webfs/fs.c
@@ -310,7 +310,7 @@ fswalk1(Fid *fid, char *name, Qid *qid)
Key *k;
for(k = f->client->qbody->hdr; k; k = k->next){
- strncpy(buf, k->key, sizeof(buf));
+ nstrcpy(buf, k->key, sizeof(buf));
if(!strcmp(name, fshdrname(buf)))
break;
}
@@ -598,7 +598,7 @@ clientctl(Client *cl, char *ctl, char *arg)
}
else if(!strcmp(ctl, "request")){
p = cl->request;
- strncpy(p, arg, sizeof(cl->request));
+ nstrcpy(p, arg, sizeof(cl->request));
for(; *p && isalpha(*p); p++)
*p = toupper(*p);
*p = 0;
@@ -624,7 +624,7 @@ clientctl(Client *cl, char *ctl, char *arg)
nil,
};
for(t = tab; *t; t++){
- strncpy(buf, *t, sizeof(buf));
+ nstrcpy(buf, *t, sizeof(buf));
if(!strcmp(ctl, fshdrname(buf))){
cl->hdr = delkey(cl->hdr, *t);
if(arg && *arg)
diff --git a/sys/src/cmd/webfs/http.c b/sys/src/cmd/webfs/http.c
index 423aab124..9b951e4fe 100644
--- a/sys/src/cmd/webfs/http.c
+++ b/sys/src/cmd/webfs/http.c
@@ -108,7 +108,7 @@ hdial(Url *u)
h->keep = 1;
h->len = 0;
h->fd = fd;
- strncpy(h->addr, addr, sizeof(h->addr));
+ nstrcpy(h->addr, addr, sizeof(h->addr));
return h;
}
@@ -441,7 +441,7 @@ http(char *m, Url *u, Key *shdr, Buq *qbody, Buq *qpost)
incref(qbody);
if(qpost) incref(qpost);
- strncpy(method, m, sizeof(method));
+ nstrcpy(method, m, sizeof(method));
switch(rfork(RFPROC|RFMEM|RFNOWAIT)){
default:
return;
@@ -640,7 +640,7 @@ http(char *m, Url *u, Key *shdr, Buq *qbody, Buq *qpost)
if(cistrcmp(s, "ICY"))
break;
}
- strncpy(status, x, sizeof(status));
+ nstrcpy(status, x, sizeof(status));
continue;
}
if((k = parsehdr(s)) == nil)
@@ -730,7 +730,7 @@ http(char *m, Url *u, Key *shdr, Buq *qbody, Buq *qpost)
qpost = nil;
}
if(cistrcmp(method, "HEAD"))
- strncpy(method, "GET", sizeof(method));
+ nstrcpy(method, "GET", sizeof(method));
case 301: /* Moved Permanently */
case 307: /* Temporary Redirect */
case 308: /* Resume Incomplete */
diff --git a/sys/src/cmd/webfs/sub.c b/sys/src/cmd/webfs/sub.c
index 274ef0b08..b8ca1e3ac 100644
--- a/sys/src/cmd/webfs/sub.c
+++ b/sys/src/cmd/webfs/sub.c
@@ -26,6 +26,13 @@ estrdup(char *s)
return s;
}
+void
+nstrcpy(char *to, char *from, int n)
+{
+ strncpy(to, from, n);
+ to[n-1] = 0;
+}
+
Key*
addkey(Key *h, char *key, char *val)
{