webfs: nstrcpy paranoia

This commit is contained in:
cinap_lenrek 2012-05-18 20:25:50 +02:00
parent feca854317
commit 9891d13887
4 changed files with 16 additions and 7 deletions

View file

@ -2,6 +2,8 @@
void* emalloc(int n); void* emalloc(int n);
char* estrdup(char *s); char* estrdup(char *s);
void nstrcpy(char *to, char *from, int n);
Key* addkey(Key *h, char *key, char *val); Key* addkey(Key *h, char *key, char *val);
Key* delkey(Key *h, char *key); Key* delkey(Key *h, char *key);
char* lookkey(Key *k, char *key); char* lookkey(Key *k, char *key);

View file

@ -310,7 +310,7 @@ fswalk1(Fid *fid, char *name, Qid *qid)
Key *k; Key *k;
for(k = f->client->qbody->hdr; k; k = k->next){ 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))) if(!strcmp(name, fshdrname(buf)))
break; break;
} }
@ -598,7 +598,7 @@ clientctl(Client *cl, char *ctl, char *arg)
} }
else if(!strcmp(ctl, "request")){ else if(!strcmp(ctl, "request")){
p = cl->request; p = cl->request;
strncpy(p, arg, sizeof(cl->request)); nstrcpy(p, arg, sizeof(cl->request));
for(; *p && isalpha(*p); p++) for(; *p && isalpha(*p); p++)
*p = toupper(*p); *p = toupper(*p);
*p = 0; *p = 0;
@ -624,7 +624,7 @@ clientctl(Client *cl, char *ctl, char *arg)
nil, nil,
}; };
for(t = tab; *t; t++){ for(t = tab; *t; t++){
strncpy(buf, *t, sizeof(buf)); nstrcpy(buf, *t, sizeof(buf));
if(!strcmp(ctl, fshdrname(buf))){ if(!strcmp(ctl, fshdrname(buf))){
cl->hdr = delkey(cl->hdr, *t); cl->hdr = delkey(cl->hdr, *t);
if(arg && *arg) if(arg && *arg)

View file

@ -108,7 +108,7 @@ hdial(Url *u)
h->keep = 1; h->keep = 1;
h->len = 0; h->len = 0;
h->fd = fd; h->fd = fd;
strncpy(h->addr, addr, sizeof(h->addr)); nstrcpy(h->addr, addr, sizeof(h->addr));
return h; return h;
} }
@ -441,7 +441,7 @@ http(char *m, Url *u, Key *shdr, Buq *qbody, Buq *qpost)
incref(qbody); incref(qbody);
if(qpost) incref(qpost); if(qpost) incref(qpost);
strncpy(method, m, sizeof(method)); nstrcpy(method, m, sizeof(method));
switch(rfork(RFPROC|RFMEM|RFNOWAIT)){ switch(rfork(RFPROC|RFMEM|RFNOWAIT)){
default: default:
return; return;
@ -640,7 +640,7 @@ http(char *m, Url *u, Key *shdr, Buq *qbody, Buq *qpost)
if(cistrcmp(s, "ICY")) if(cistrcmp(s, "ICY"))
break; break;
} }
strncpy(status, x, sizeof(status)); nstrcpy(status, x, sizeof(status));
continue; continue;
} }
if((k = parsehdr(s)) == nil) if((k = parsehdr(s)) == nil)
@ -730,7 +730,7 @@ http(char *m, Url *u, Key *shdr, Buq *qbody, Buq *qpost)
qpost = nil; qpost = nil;
} }
if(cistrcmp(method, "HEAD")) if(cistrcmp(method, "HEAD"))
strncpy(method, "GET", sizeof(method)); nstrcpy(method, "GET", sizeof(method));
case 301: /* Moved Permanently */ case 301: /* Moved Permanently */
case 307: /* Temporary Redirect */ case 307: /* Temporary Redirect */
case 308: /* Resume Incomplete */ case 308: /* Resume Incomplete */

View file

@ -26,6 +26,13 @@ estrdup(char *s)
return s; return s;
} }
void
nstrcpy(char *to, char *from, int n)
{
strncpy(to, from, n);
to[n-1] = 0;
}
Key* Key*
addkey(Key *h, char *key, char *val) addkey(Key *h, char *key, char *val)
{ {