hostsreader: use temporary vars for string manipulation

working directly with the passed variables could lead to bugs when
some lines in the hosts file aren't well-formed and the loop is taken
several times while the buf vars are already modified.
pull/51/head
rofl0r 2014-11-14 13:17:36 +01:00
parent 4fb7eb0532
commit 25ee4c318d
1 changed files with 18 additions and 16 deletions

View File

@ -29,26 +29,28 @@ int hostsreader_get(struct hostsreader *ctx, char* buf, size_t bufsize) {
while(1) {
if(!fgets(buf, bufsize, ctx->f)) return 0;
if(*buf == '#') continue;
ctx->ip = buf;
while(*buf && !isspace(*buf) && bufsize) {
buf++;
bufsize--;
char *p = buf;
size_t l = bufsize;
ctx->ip = p;
while(*p && !isspace(*p) && l) {
p++;
l--;
}
if(!bufsize || !*buf || buf == ctx->ip) continue;
*buf = 0;
buf++;
while(*buf && isspace(*buf) && bufsize) {
buf++;
bufsize--;
if(!l || !*p || p == ctx->ip) continue;
*p = 0;
p++;
while(*p && isspace(*p) && l) {
p++;
l--;
}
if(!bufsize || !*buf) continue;
if(!l || !*p) continue;
ctx->name = buf;
while(*buf && !isspace(*buf) && bufsize) {
buf++;
bufsize--;
while(*p && !isspace(*p) && l) {
p++;
l--;
}
if(!bufsize || !*buf) continue;
*buf = 0;
if(!l || !*p) continue;
*p = 0;
if(isnumericipv4(ctx->ip)) return 1;
}
}